我应该在哪里保存我想长期保存的数据和文件,以及如何防止iCloud将其备份

我有任意types的文件 – 包括核心数据存储库 – 我需要保留,而不是iOS删除它们。 通常,我不希望iCloud将这些文件备份。 我应该在哪里救他们?

本地保存文件已从iOS5.0及更早版本,5.0.1和5.1版本更新,主要更新到地址iCloud备份问题。 有两个Apple源文档( 文件系统编程指南和QA1719 )一起提供支持以下内容的信息:

  • iOS 5.0

文件应保存在“Caches”目录中,因为如果存储在“文档”文件夹中,则无法防止备份。 请注意,系统可能会删除这些文件(请参阅QA1719),因此您需要根据需要重新创build每个文件。 要查找caching目录,请使用以下命令:

[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] 
  • iOS 5.0.1

文件应保存在“/ Library / Application Support”( FSP ,第15页)中,可以通过以下方式更好地访问:

 [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject] 

我的经验是,这个目录并不总是存在,因此你可能需要创build它:

 - (NSString *)applicationAppSupportDirectory { return [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject]; } NSFileManager *manager = [NSFileManager defaultManager]; NSString *appSupportDir = [self applicationAppSupportDirectory]; if(![manager fileExistsAtPath:appSupportDir]) { __autoreleasing NSError *error; BOOL ret = [manager createDirectoryAtPath:appSupportDir withIntermediateDirectories:NO attributes:nil error:&error]; if(!ret) { NSLog(@"ERROR app support: %@", error); exit(0); } } 

保存到这个目录(或子目录)的文件需要一个扩展属性来告诉iCloud不要备份(参见QA1719)。

PS:我还没有find一种方法来设置部署目标到这个版本,如果有什么方法,请发表评论。

  • iOS 5.1

如上所述,文件(或文件夹)应位于“应用程序支持”文件夹中。 为防止iCloud备份使用:

 [URL setResourceValue: [NSNumber numberWithBool: YES] forKey:NSURLIsExcludedFromBackupKey error:&error] 

如QA1719中所述。 请注意,您可以将此密钥应用到目录以防止其内容被备份。 从QA1719完整的方法:

 - (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); NSError *error = nil; BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] forKey: NSURLIsExcludedFromBackupKey error: &error]; if(!success){ NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error); } return success; }