3

ドキュメントからiOSのリソースフォルダーにファイルをコピーしたい。

文書化するリソースではありません。

ドキュメントからリソースへのファイル。

だから私は次のコードを書きました。

- (NSString *) getDBPath2 
{   
    NSString *dbPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Htoo.mp3"];

    return dbPath;
}

- (void) copyDatabaseIfNeeded 
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSString *dbPath = [self getDBPath];
    BOOL success = [fileManager fileExistsAtPath:dbPath]; 

    if(success) 
    {   
        NSString *defaultDBPath = [[NSBundle mainBundle] resourcePath];
        success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];

        if (!success)
            NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }   
}

- (NSString *) getDBPath 
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex:0];
    return [documentsDir stringByAppendingPathComponent:@"Htoo.mp3"];
}

上記のコードを書いたとき、エラーメッセージが表示されました。

2012-08-17 23:55:03.482 TestProjects[1645:f803] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Failed to create writable database file with message 'The operation couldn’t be completed. (Cocoa error 516.)'.'

では、iOS でドキュメントからリソースにファイルをコピーするにはどうすればよいですか?

お読みいただきありがとうございます。

4

2 に答える 2

4

アプリのリソース (バンドル) は読み取り専用です。公開後にバンドルを変更することはできません。バンドル パッケージはコンパイル時に Xcode によって作成され、実行時に変更することはできません。アプリのインストール後にデータを保存する方法はたくさんあります: NSDefaults、sqlite、Core Data、ドキュメント ディレクトリ。

于 2012-08-17T19:08:45.133 に答える