2011-08-24 52 views

回答

1

版本用途类似于版本上的应用程式,以指示除了在核心数据演变的代码是数据模型,即在.xcdatamodel文件中定义的实体,实体属性和关系的相同的基本代码的不同进化变化。

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

它的工作原理是这样的:

你发布你的应用程序的1.0版本,它与一个版本1.0以及数据模型。最终用户然后使用您的应用程序并使用数据模型1.0将其数据保存为格式化/结构化的持久性存储。

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

1

对核心数据模型所做的每一项更改都会生成新版本。每一次改变。

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

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

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

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

顺便说一句,一个可接受的计划就是删除现有的数据库,如果模型已经改变了,只要你可以把某些用户以某种方式返回到数据库中(或者如果用户从未放过任何东西,就像在缓存数据库中一样)。

+0

还有一件事,如果我们删除一个实体,那么我们应该手动迁移数据或类似的东西,我可以有一个更简单的示例模型示例。我有很多疑问。新版本意味着相同的文件.xcmod​​el,当我们创建一个新模型.xcmod​​elId时,我们需要手动将数据迁移到另一个将由第二个模型创建的sqlite。合理?或者我搞砸了? – Vijay

+0

删除实体是一个简单的迁移。它可以使用自动迁移来完成。只需创建一个新版本并编辑模型并将其设置为当前版本即可。 – Sandeep

+0

听起来不错。但是,当手动迁移出现时,我们使用手动迁移进行什么样的更改。我们怎么知道我们应该使用手动migartion ?. – Vijay

相关问题