2

我在 App Store 上有一个应用程序,现在是第二个版本。该应用程序使用 Core Data 来存储我不想在安装应用程序升级时丢失的信息。

我的问题是,如果用户在他们的 iPad 上安装了 1.0 版并且将数据存储在他们的核心数据库中,那么当下载并安装 1.1 版更新时,该数据库是否会被删除?

4

3 回答 3

7

这完全取决于你。设置 Core Data 堆栈时,您可以将 NSPersistentStoreCoordinator 指向应用程序可写文件夹中任何您想要的特定文件。您放置该文件的位置决定了它是否在应用更新期间被迁移。

一个常见的选择是将您的数据库文件粘贴到用户的 Documents 目录中,这将导致 iOS 在安装应用程序更新时将其复制。然后,在启动时,您负责处理您认为合适的数据库(更新其中的数据、迁移架构等)。将文件放在其他地方 - 例如在临时目录中 - 可能会导致它在更新期间丢失。

有关详细信息,请参阅文件系统编程指南核心数据模型版本控制和数据迁移

于 2013-06-13T23:43:07.680 回答
0

除非您在委托持久存储方法中取消注释苹果代码或自己编写,否则不应删除它。如果您没有删除用户数据库并且没有编写迁移代码,则应用程序将崩溃(如果您对模型进行了更改)。轻量级迁移简单且易于实施。你传入一个字典作为选项(见下文)。
您对数据模型进行了哪些更改?

 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();
}
于 2013-06-14T01:11:28.777 回答
0

这与 CoreData 完全无关,但我认为我应该分享。

我有一个应用程序可以下载其他资源,将它们保存到 Documents 的子文件夹中,并将它们的路径存储在 .plist 文件中(也在 /Documents 中)。

因为我存储了完整路径并在以后使用它,所以当用户更新应用程序时,路径将不再有效(应用程序沙箱的路径中有一个“随机字母/数字”部分,该部分会在你更新应用程序

于 2013-06-14T01:51:04.200 回答