我在App Store上有一个应用程序,现在是第二个版本。该应用程序使用Core Data存储我不希望在安装应用程序升级时丢失的信息。
我的问题是,如果用户在iPad上安装了1.0版并且数据存储在其核心数据库中,那么在下载并安装1.1版更新时是否会删除此数据库?
答案 0 :(得分:7)
这完全取决于你。设置Core Data堆栈时,可以将NSPersistentStoreCoordinator指向应用程序可写文件夹中任意位置的特定文件。放置该文件的位置决定了它是否在应用更新期间迁移。
常见的选择是将数据库文件粘贴到用户的Documents目录中,这会导致iOS在安装应用程序更新时将其复制。然后,在启动时,您负责根据需要处理该数据库(更新其中的数据,迁移您的架构等)。将文件放在其他位置(例如,在临时目录中)可能会导致文件在更新期间丢失。
有关详细信息,请参阅File System Programming Guide和Core Data Model Versioning and Data Migration。
答案 1 :(得分:0)
除非您在委托持久性存储方法中取消注释Apple代码或自行编写,否则不应删除它。如果您没有删除用户数据库并且没有编写迁移代码,则应用程序将崩溃(如果您对模型进行了更改)。轻量级迁移非常简单,易于实现。你传入一个字典中的选项(见下文) 你在数据模型中有什么变化?
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeUrl
options:options
error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
答案 2 :(得分:0)
这与CoreData完全无关,但我想我应该分享。
我有一个应用程序可以下载其他资源,将它们保存到Documents中的子文件夹,并将它们的路径存储在.plist文件中(也在/ Documents中)。
因为我正在存储完整路径,并且稍后使用它,当用户更新应用程序时,路径将不再有效(应用程序沙箱的路径中有“随机字母/数字”部分, ,当您更新应用时,该部分会发生变化 )