我有文件 - 包括核心数据存储库在内的任意类型 - 我需要保留而不让 iOS 删除它们。通常,我不希望 iCloud 备份这些文件。我应该把它们保存在哪里?
问问题
4593 次
1 回答
18
本地保存文件从 iOS5.0 及更早版本、5.0.1 和 5.1 及更新版本主要是为了解决 iCloud 备份问题。有两个 Apple 源文档(文件系统编程指南和QA1719)共同提供支持以下内容的信息:
- iOS 5.0
文件应保存在“Caches”目录中,因为如果它们存储在 Documents 文件夹中,则无法阻止备份。请注意,系统可能会删除这些文件(请参阅 QA1719),因此您需要能够根据需要重新创建每个文件。要查找缓存目录,请使用以下命令:
[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]
- iOS 5.0.1
文件应保存在“/Library/Application Support”(FSP,第 15 页)中,可以通过以下方式更好地访问:
[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject]
我的经验是这个目录并不总是存在,因此您可能需要创建它:
- (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:我还没有找到将Deployment目标设置为这个版本的方法,如果有方法请发表评论。
- 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;
}
于 2012-09-11T13:52:32.123 回答