1

NSDocumentDirectory にあるすべてのドキュメントを NSCachesDirectory に移動し、アプリの次のバージョン更新の最初のアプリ起動時にそれらの NSDocument ファイルをすべて削除しようとしています。私がこれを行っている唯一の理由は、Apple の iOS データ ストレージ ガイドラインを順守するためです。私のアプリの更新は、.PDF ファイルを NSDocumentsDirectory に保存するために拒否されたからです (理由はわかりません。更新 (アプリはほぼ 2 年前のもので、初日からこの方法で .PDF を保存しています)、厳密なレビュー担当者を獲得したのでしょうか?)

ユーザーが既にダウンロードした .PDF ファイルをすべて NSCachesDirectory に移動し、NSDocumentDirectory から削除する必要があります。

これを達成できる簡単な方法はありますか?

提供されたヘルプに事前に感謝します。

私はこれを試しました:

NSFileManager *fileManager = [NSFileManager defaultManager];

NSError *error;
NSUserDefaults      *Defaults;
 int                 launchCount;

 Defaults = [NSUserDefaults standardUserDefaults];
 launchCount = [Defaults integerForKey:@"launchCount" ] + 1;
 [Defaults setInteger:launchCount forKey:@"launchCount"];
 [Defaults synchronize];

if(launchCount == 1) {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSArray *path2 = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *dest = [path2 objectAtIndex:0];

NSArray *Contents = [fileManager contentsOfDirectoryAtPath:documentsDirectory error:&error];

    for(NSString *source in Contents)
    {
        if(![fileManager moveItemAtPath:source
                                 toPath:dest
                                  error:&error])
        {
            //TODO: Handle error
            NSLog(@"Error: %@", error);
        }
    }
}

しかし、コンソールに次のエラーが表示されます。

NSFilePath=Test.pdf、NSDestinationFilePath=/Users/Charley/Library/Application Support/iPhone Simulator/5.1/Applications/96EB01D1-81B7-4ECE-B337-D2D663969EE3/Library/Caches、NSUnderlyingError=0xb566d50「操作を完了できませんでした」 。 ファイルが存在しています"

4

1 に答える 1

2

はい、NSFileManager を使用します。

ドキュメント パスとキャッシュ パスを取得します。すべてのファイルを反復処理し、NSFileManager を使用して移動します

- (void) moveAllDocs {
    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSError *error = nil;

    NSString *sourceDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *destinationDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

    NSArray *contents = [fileManager contentsOfDirectoryAtPath:sourceDirectory error:&error];

    for(NSString *sourceFileName in contents) {
        NSString *sourceFile = [sourceDirectory stringByAppendingPathComponent:sourceFileName];
        NSString *destFile = [destinationDirectory stringByAppendingPathComponent:sourceFileName];
        if(![fileManager moveItemAtPath:sourceFile toPath:destFile error:&error]) {
            NSLog(@"Error: %@", error);
        }
    }

}
于 2012-08-23T22:29:00.540 に答える