2012-05-08 17 views
2

メインバンドルから.dxtファイルを.dxtファイルにコピーするこのコードがあります。これはシミュレータでは動作しますが、デバイスでは動作しません。私はそれがSimulator上でドキュメントdirのtxtファイルを削除し、アプリケーションを再実行することによって動作することを確認します。デバイス上でアプリケーションを実行すると、copyItemAtPathが失敗しました。ここに私のコードです。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]); 
    } 

私は再び清掃してビルドしようとしましたが、電話機を再起動しても何も動作しません。

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

+0

[error localizedDescription]からどのようなエラーメッセージがありますか? – Vin

+0

質問を更新し、エラーメッセージを添付しました。 – Diffy

+3

デバイスとシミュレータの間に大文字と小文字の区別があります。デバイスは大文字と小文字を区別 – user523234

答えて

1

Foundation/FoundationErrors.hはあなたにそれ以上のビルド中にアプリケーションバンドルにコピーされていないファイルを意味NSFileReadNoSuchFileError = 260, // Read error (no such file)

を与えます。

シミュレータバンドルには、ビルド中に新しいファイルがそこにコピーされますが、以前にコピーされたファイルは、Cleanを実行している間も削除されません。

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

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