我在 App Store 上有一个应用程序,现在是第二个版本。该应用程序使用 Core Data 来存储我不想在安装应用程序升级时丢失的信息。
我的问题是,如果用户在他们的 iPad 上安装了 1.0 版并且将数据存储在他们的核心数据库中,那么当下载并安装 1.1 版更新时,该数据库是否会被删除?
这完全取决于你。设置 Core Data 堆栈时,您可以将 NSPersistentStoreCoordinator 指向应用程序可写文件夹中任何您想要的特定文件。您放置该文件的位置决定了它是否在应用更新期间被迁移。
一个常见的选择是将您的数据库文件粘贴到用户的 Documents 目录中,这将导致 iOS 在安装应用程序更新时将其复制。然后,在启动时,您负责处理您认为合适的数据库(更新其中的数据、迁移架构等)。将文件放在其他地方 - 例如在临时目录中 - 可能会导致它在更新期间丢失。
有关详细信息,请参阅文件系统编程指南和核心数据模型版本控制和数据迁移。
除非您在委托持久存储方法中取消注释苹果代码或自己编写,否则不应删除它。如果您没有删除用户数据库并且没有编写迁移代码,则应用程序将崩溃(如果您对模型进行了更改)。轻量级迁移简单且易于实施。你传入一个字典作为选项(见下文)。
您对数据模型进行了哪些更改?
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();
}
这与 CoreData 完全无关,但我认为我应该分享。
我有一个应用程序可以下载其他资源,将它们保存到 Documents 的子文件夹中,并将它们的路径存储在 .plist 文件中(也在 /Documents 中)。
因为我存储了完整路径并在以后使用它,所以当用户更新应用程序时,路径将不再有效(应用程序沙箱的路径中有一个“随机字母/数字”部分,该部分会在你更新应用程序)