0

次のメソッドを呼び出した後、この例外を受け取ります。そして、それはアプリが初めてロードされたときにのみ発生します。もう一度アプリを開くと、正常に動作します。誰か助けてもらえますか?

-(void) createAndCheckDatabase
{
  BOOL success; 

  self.databaseName = @"database.db";
  NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentDir = [documentPaths objectAtIndex:0];
  self.databasePath = [[documentDir stringByAppendingPathComponent:self.databaseName]retain];

  NSFileManager *fileManager = [NSFileManager defaultManager];

  success = [fileManager fileExistsAtPath:self.databasePath];

  if(success) return; 

  NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:self.databaseName];

  NSError *err;
  [fileManager copyItemAtPath:databasePathFromApp toPath:self.databasePath error:nil];
  if (err) {
//      DebugLog(@"%@", [err description]);
  }

}
4

2 に答える 2

2

if(err)... errが初期化されていないため、クラッシュします!そして、あなたはそれをfileManagerで使用しないでくださいcopyItemAtPath:

于 2012-04-11T09:55:02.990 に答える
1

EXEC_BAD_ACCESSほとんどの場合、ポインタまたはC配列を処理するバグか、オブジェクトが上書きされたことを意味しますrelease

良いニュースは、デバッガー(Xcodeで実行されている場合)にスタックトレース、または何が悪かったのかを正確に示すクラッシュログが必要なことです。(クラッシュログを収集して読み取る方法)。

ゾンビーズインストゥルメントを使用してコードを「プロファイリング」することは、オーバーリリースに関する詳細情報を取得するための最良の方法です。

シンボリックスタックトレースを投稿できる場合は、より適切な診断を試みることができます。

于 2012-04-11T10:00:58.557 に答える