2

メインバンドルからドキュメントディレクトリに.txtファイルをコピーするこのコードがあります。これはシミュレーターでは機能しますが、デバイスでは機能しません。ドキュメントディレクトリのtxtファイルを削除し、アプリを再度実行して、シミュレーターで動作することを確認します。デバイスでアプリを実行すると、copyItemAtPath が失敗しました。これが私のコードです。

     BOOL success;
     NSFileManager *fileManager = [NSFileManager defaultManager];
     NSError *error;
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES);
     NSString *documentsDirectory = [paths objectAtIndex:0];

     NSString *writableDBPath= [documentsDirectory  stringByAppendingPathComponent:@"zipFileName.txt"];
     success = [fileManager fileExistsAtPath:writableDBPath];
     if (success)
     {
        return;
     }

     // The writable database does not exist, so copy the default to the appropriate location.
     NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"zipFileName.txt"];
     success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
     if (!success) {
        NSAssert1(0, @"Failed to create writable database file with message '%@'.",   [error localizedDescription]);
     }

もう一度クリーニングとビルドを試みましたが、電話を再起動しても何も機能しません。

エラー: 2012-05-08 16:13:19.487 balita[162:707] * -[ViewController currentJsonFile] でのアサーションの失敗、/Users/diffy/Documents/balita/balita/ViewController.m:144 2012-05-08 16 :13:19.496 バリタ[162:707]キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: '書き込み可能なデータベース ファイルを作成できませんでした。(ココア エラー 260)'.' * * 最初のスロー コール スタック:

4

1 に答える 1

1

Foundation/FoundationErrors.hあなたにあげるNSFileReadNoSuchFileError = 260, // Read error (no such file)

これは、ビルド中にファイルがアプリ バンドルにコピーされなくなったことを意味します。

ビルド中に新しいファイルがそこにコピーされるため、シミュレーター バンドルにはまだファイルがありますが、以前にコピーされたファイルは、ターゲットのクリーンを実行しても削除されません。

シミュレーターで問題を再現するには、そこからアプリを削除し (ロングタップするか、シミュレーター ディレクトリからアプリ フォルダーを削除して)、再インストールします。

問題を解決するには、ファイルをCopy Bundle Resourcesターゲットのステージに追加し、ファイルがプロジェクトに追加され、存在することを確認します。

于 2012-05-08T09:05:05.433 に答える