CoreData中的不同模型版本

时间:2013-06-18 16:47:40

标签: iphone ios core-data core-data-migration

我正在进行iOS应用程序的重大更新。假设我们有两个分支,develop包含当前在App Store上的内容,feature/new_version包含主要更新的分支。

feature/new_version有很多模型更改,因此有一个新的模型版本可以添加/删除实体,属性等。另一方面,我们在{{1}中进行了一些小的改进和错误修正这也导致了新模型版本的创建(这些也是提交给App Store的更新)。

现在我遇到了两个分支,它们的数据模型非常不同。问题是:如果我将“缺失”属性添加到develop模型,当我向App Store提交主要更新时,核心数据是否足够智能以进行自动轻量级迁移?或者我应该下载feature/new_version中使用的数据模型,并在develop基础上创建一个新的模型版本并重新添加/删除自我第一次创建分支以来的所有更改?

1 个答案:

答案 0 :(得分:2)

自动轻量级迁移是否有效取决于从旧模型到新模型的更改的性质。在您的情况下,当前发布的版本与new_version分支中的版本之间的差异。

如果更改只是添加新属性,没问题,那就是自动轻量级迁移的设计方案。如果它们更复杂,您更可能需要一些备用迁移方案。您没有详细说明更改,但由于您说新版本“添加/删除实体”自动迁移听起来不太可能。如果对模型进行结构更改,添加“缺失”属性将无济于事。核心数据并不介意简单的迁移,但不会推断模型结构的重构。

只要它包含您需要的所有内容,如何创建合并模型并不重要。如果只需添加新属性,就没有理由重新开始。重要的是得到的模型是正确的,而不是你采取的步骤。

判断自动轻量级迁移是否有效的最简单方法通常是在调试版本上尝试它,看看会发生什么。在设备上安装当前发布的版本,创建一些数据,然后使用Xcode安装新版本。添加持久性存储时,请确保NSMigratePersistentStoresAutomaticallyOptionNSInferMappingModelAutomaticallyOption都是YES。如果它有效,那很好。如果没有,核心数据提供了模型何时需要更多变化的替代方案。