如何将所有文件从NSDocumentDirectory移动到NSCachesDirectory?

时间:2012-08-23 22:14:22

标签: ios objective-c appstore-approval nsdocumentdirectory

我正在尝试将驻留在NSDocumentDirectory中的所有文档移动到NSCachesDirectory,然后在第一次应用程序启动我的应用程序的下一个版本更新时删除所有这些NSDocument文件。我这样做的唯一原因是遵守Apple的iOS数据存储指南,因为我的应用更新因将.PDF文件保存到NSDocumentsDirectory而被拒绝(我不知道为什么,因为该应用程序从未被拒绝,直到此更新(应用程序差不多2年了,我从第1天就开始以这种方式保存.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“操作无法' t完成。文件存在“

1 个答案:

答案 0 :(得分: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);
        }
    }

}