不兼容的CoreData存储是否总是导致崩溃?

时间:2017-02-22 08:40:26

标签: ios objective-c swift core-data nsmanagedobject

问题:

我们最近在我们的应用程序中引入了CoreData,之前发布了一个包含不完整CoreData模型的版本。在该发布版本中,我们从未实现过将数据写入sqlite数据库的代码,只实现了模型。

在我们的内部测试中,我们会将设备恢复到以前发布的不完整模型,然后更新到新模型,从不必执行迁移,也不会遇到不兼容的存储异常。

但是,在我们的Beta版测试中,我们发现由于存储不兼容而导致崩溃的现有用户,而某些现有用户则没有。

问题:

不兼容的存储是否总是导致崩溃?如果是这样,为什么在从旧版本更新到其他CoreData模型时我们不会遇到崩溃?

我应该提一下,当我们对最新的CoreData模型进行更改时,我们会遇到不兼容的存储错误,但是当我们恢复到核心数据模型的非常原始版本时,我们不会看到抛出此异常。 / p>

1 个答案:

答案 0 :(得分:0)

要回答您的问题,请在项目中调用以下代码行

[__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                                    configuration:nil
                                                              URL:storeURL
                                                          options:nil
                                                            error:&error])

当您使用CoreData设置项目时由Xcode自动添加的代码然后是,不兼容的存储将始终导致崩溃,除非您执行轻度迁移或大量迁移,具体取决于您的情况。

轻量级迁移非常简单直接,但您必须遵守一些规则。对于轻度迁移,您可以将上面的代码行更改为:

 [__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                                        configuration:nil
                                                                  URL:storeURL
                                                              options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}
                                                                error:&error])

您可以在developer.apple

上查看有关轻量级迁移的详情

另外,您应该在评论中查看@raki发布的链接。