6

メインバンドルに「Images」という名前のフォルダーがあるアプリを使用しています。

このフォルダーには、いくつかの画像を含む「Images1」という別のフォルダーがあります。

アプリの起動時に、ドキュメント ディレクトリに「Images」フォルダが必要です。

「Images1」フォルダから画像を取得したい。

しかし、次のコードでは、ドキュメント ディレクトリの "Images" フォルダーに画像を取得できません。

編集済み

       BOOL success1;
    NSFileManager *fileManager1 = [NSFileManager defaultManager];
    NSError *error1;
    NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory1 = [paths1 objectAtIndex:0];
   NSString *writableDBPath1 = [documentsDirectory1 stringByAppendingPathComponent:@"Images/Images1"];
    success1 = [fileManager fileExistsAtPath:writableDBPath1];

    if (success1) return;
    // The writable database does not exist, so copy the default to the appropriate location.
    NSString *defaultDBPath1 = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Images/Images1"];

    NSLog(@"Default : %@",defaultDBPath1);
    success1 = [fileManager1 copyItemAtPath:defaultDBPath1 toPath:writableDBPath1 error:&error1];

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

    }

私を助けてください。

4

1 に答える 1

4

フォルダ ツリーにファイルがあることを確認しますか?

NSString *defaultDBPath1 = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"/Images/Images1"];

通常、xcode がパッケージを作成すると、ディレクトリの内容が平坦化されます。最初に、ソース フォルダにすべてのものがあることを確認します。フォルダーがパッケージ エクスプローラーに表示されていても、アプリにコピーすると、画像がルート フォルダーにあることがわかります。これを回避するには、xcode プロジェクトで Image フォルダーを追加するときに、「フォルダー参照を作成する」オプションをオンにします。

ただし、上書きが原因で書き込みが失敗する場合があります。その場合、以下のデリゲート メソッドを実装する必要がありNSFileManagerます。

- (void) copyFolder {
    BOOL success1;
    NSFileManager *fileManager1 = [NSFileManager defaultManager];
    fileManager1.delegate = self;
    NSError *error1;
    NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory1 = [paths1 objectAtIndex:0];
    NSString *writableDBPath1 = [documentsDirectory1 stringByAppendingPathComponent:@"/Images"];
    success1 = [fileManager1 fileExistsAtPath:writableDBPath1];
    if (success1 )
    {

        NSString *defaultDBPath1 = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Images"];
        NSLog(@"default path %@",defaultDBPath1);
        success1 = [fileManager1 copyItemAtPath:defaultDBPath1 toPath:writableDBPath1 error:&error1];
    } else {
        if (![[NSFileManager defaultManager] fileExistsAtPath:writableDBPath1])
            [[NSFileManager defaultManager] createDirectoryAtPath:writableDBPath1 withIntermediateDirectories:NO attributes:nil error:&error1];
    }
}

- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error copyingItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath{
    if ([error code] == 516) //error code for: The operation couldn’t be completed. File exists
        return YES;
    else
        return NO;
}
于 2013-07-16T07:08:21.587 に答える