Model Versioning和Data MIgration有什么区别?

时间:2011-08-24 03:22:19

标签: iphone objective-c ios ipad core-data

我是核心数据的新手,任何人都可以让我知道版本控制和数据迁移之间的区别。当我们进行版本控制和数据迁移时?

2 个答案:

答案 0 :(得分:1)

您对Core Data模型所做的每项更改都会产生新版本。每一次改变。

Core Data没有一个模型比另一个模型更新的概念,它只是知道它们是不同的。核心数据不会使用由不同于您的模型版本创建的商店(磁盘上的数据库)。

这就是Migration的用武之地,这只是告诉Core Data如何从一个模型到另一个模型的过程,数据存储在由特定模型制作的数据库中。核心数据可以尝试猜测(自动迁移),对于简单的更改可能会正常工作,但是您可以手动创建更复杂的迁移,从一个模型版本中精心提取数据并将其放置在较新模型版本的数据库中。

什么时候创建新的模型版本?将具有Core Data模型的应用程序发送到App Store后,应立即为更改创建新的模型版本,以便为可以将App Store版本更新到更高版本的人员创建迁移路径的原始模型版本。

什么时候应该创建迁移?基本上,每当您将新版本发布到商店时,您需要找出商店中任何早期型号(因此可能在某人的手机上)到最新数据模型版本的路径。如上所述,如果更改很简单,您可以使用自动版本,但始终进行测试(保持每个应用商店版本都可以构建,以便您可以测试加载旧版本然后迁移到新版本。)

顺便说一下,如果模型完全改变了,可接受的计划就是删除现有的数据库,只要你能以某种方式将用户所做的任何东西放回到数据库中(或者如果用户从未放过任何东西)在所有情况下,如在缓存数据库中)。

答案 1 :(得分:1)

版本控制就像应用程序上的版本控制一样,用于指示相同基本代码的不同演变变体,但在核心数据中,代码演变的是数据模型,即.xcdatamodel文件中定义的实体,实体属性和关系。

迁移是您对持久存储中最终用户的现有数据执行的操作,以便格式化/构建存储以使用新版本的数据模型。

它的工作原理如下:

您发布的应用版本1.0,作为1.0版本的数据模型。最终用户然后使用您的应用程序并使用您的数据模型1.0将数据保存在格式化/结构化的持久存储中。

然后您发布应用版本2.0,并在此过程中对数据模型进行更改,例如您更改属性名称,添加属性或添加实体。您可以将数据模型版本化为2.0(实际版本名称是任意的)。然后,您可以提供自动或手动迁移,以便可以将1.0持久性存储文件中的最终用户数据重新格式化为数据模型2.0格式。