问题:
我们最近在我们的应用程序中引入了CoreData,之前发布了一个包含不完整CoreData模型的版本。在该发布版本中,我们从未实现过将数据写入sqlite数据库的代码,只实现了模型。
在我们的内部测试中,我们会将设备恢复到以前发布的不完整模型,然后更新到新模型,从不必执行迁移,也不会遇到不兼容的存储异常。
但是,在我们的Beta版测试中,我们发现由于存储不兼容而导致崩溃的现有用户,而某些现有用户则没有。
问题:
不兼容的存储是否总是导致崩溃?如果是这样,为什么在从旧版本更新到其他CoreData模型时我们不会遇到崩溃?
我应该提一下,当我们对最新的CoreData模型进行更改时,我们会遇到不兼容的存储错误,但是当我们恢复到核心数据模型的非常原始版本时,我们不会看到抛出此异常。 / p>
答案 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发布的链接。