0

後でアプリに書き込む plist ファイルを作成しようとしています。最初の viewDidLoad で、次のメソッドを呼び出します

-(void)createFavoritesFile{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *documentDBFolderPath = [documentsDirectory stringByAppendingPathComponent:@"data.plist"];

    if (![fileManager fileExistsAtPath:documentDBFolderPath])
    {
        NSLog(@"file doesnt exist");
        NSString *resourceDBFolderPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"data.plist"];
        [fileManager copyItemAtPath:resourceDBFolderPath toPath:documentDBFolderPath error:&error];
    }
    else{
        NSLog(@"file exists");
    }
}

ただし、アプリを実行するたびに、作成されたファイルが見つからず、アプリを閉じて再度開くと、NSLog はファイルが存在しないことを示します。何か不足していますか?

4

2 に答える 2

1

からの戻り値とエラーを無視しています-copyItemAtPath:toPath:error:。呼び出しが返さNOれ、何らかのエラーが発生することは間違いありません。その戻り値を確認し、返された場合はエラーを出力する必要がありますNO

これが失敗する理由として考えられるのは、何らかの理由で実際にはドキュメント フォルダーがまだない可能性があることです。作成を依頼NSFileManagerすることができます。

于 2012-10-30T22:24:17.367 に答える
0

リソース パスを印刷し、ファイルがそこに存在するかどうかを確認します。そうであるが機能しない場合は、この質問を確認してください: [[NSBundle mainBundle] resourcePath] からのパスの操作

とにかく、リソースがメインバンドルにある場合は、いつでも使用できます:

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension
于 2012-10-30T22:27:16.750 に答える