从App Store更新应用程序时是否删除了应用程序的核心数据库?

时间:2013-06-13 22:31:01

标签: ipad core-data ios6

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

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

3 个答案:

答案 0 :(得分:7)

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

常见的选择是将数据库文件粘贴到用户的Documents目录中,这会导致iOS在安装应用程序更新时将其复制。然后,在启动时,您负责根据需要处理该数据库(更新其中的数据,迁移您的架构等)。将文件放在其他位置(例如,在临时目录中)可能会导致文件在更新期间丢失。

有关详细信息,请参阅File System Programming GuideCore 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中)。

因为我正在存储完整路径,并且稍后使用它,当用户更新应用程序时,路径将不再有效(应用程序沙箱的路径中有“随机字母/数字”部分, ,当您更新应用时,该部分会发生变化