在iOS上存储.sqlite数据库的位置

Bri*_*ian 3 iphone core-data

在我的应用程序中,我通过CoreData检索,解析并将XML数据保存到sqlite数据库.此数据对于应用程序的运行至关重要,并且需要离线使用.我的最低目标是iOS 4.3

这不是用户生成的,因此我无法将其存储在/ Library/Documents中

  • iOS 5.0不支持将文件标记为"不备份"的扩展属性,因此,备份/ tmp&/ Library/Caches之外的任何内容.

资料来源:https://developer.apple.com/library/ios/#qa/qa1719/_index.html

因此,除了将我的数据存储在/ Library/Caches文件夹中之外别无选择.iOS可以随时清除此目录.

这是否意味着我的应用程序随时下载新数据(通过xml)并使用......保存 [managedObjectContext save:&error] ... 我首先要检查MyData.sqlite是否仍然存在?

如果没有,那么我将需要"恢复"CoreData堆栈,然后警告可能需要获取新指针的任何其他对象,或者修改它的managedObjectContext的persistentStoreCoordinator.

这个解决方案似乎不对,但是基于iOS 5.0不支持"不备份",Apple的数据存储指南以及/ Libraray/Caches目录的清除方式,我不知道有什么其他选择.

ste*_*her 7

Nick Lockwood精彩的StandardPaths图书馆有一个观点 ; 这个库Library/Application Support/Offline Data按照惯例存储应用程序私有的,不要被修剪的,不要备份的,持久性的跨应用程序更新数据.

你是对的,对于iOS 5.0及更早版本,任何防止文件备份的尝试都是无效的.

在iOS 5.0.1上,备份防护实现如下():

const char *filePath = [[fileURL path] fileSystemRepresentation];
const char *attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
Run Code Online (Sandbox Code Playgroud)

在iOS 5.1及更高版本上,备份防护实现如下():

[fileURL setResourceValue: [NSNumber numberWithBool: YES]
                   forKey: NSURLIsExcludedFromBackupKey
                    error: &error];
Run Code Online (Sandbox Code Playgroud)