迁移步骤
初始化核心数据堆栈时,涉及的步骤之一是将一个存储添加到持久存储协调器。 当您遇到此步骤时,核心数据在将商店添加到协调器之前做了一些事情。
首先,核心数据分析商店的模型版本。 接下来,它将此版本与协调器的配置数据模型进行比较。 如果商店的型号版本和协调器的型号版本不匹配,则Core Data将在启用时执行迁移。
注意:如果未启用迁移,并且存储与模型不兼容,则Core Data将不会将该存储附加到协调器,并使用适当的原因代码指定错误。
要启动迁移过程,Core Data需要原始数据模型和目标模型。它使用这两个版本来加载或创建用于迁移的映射模型,用于将原始存储中的数据转换为可以存储在新存储中的数据。一旦核心数据确定映射模型,迁移过程就可以开始了。
迁移三个步骤:
- 首先,Core Data将所有对象从一个数据存储复制到下一个。
- 接下来,Core Data根据关系映射连接并关联所有对象。
- 在目标模型中强制执行任何数据的验证。核心数据在数据复制期间禁用目标模型验证。
您可能会问:“如果出现问题,原始数据存储将会发生什么情况?”几乎所有类型的Core Data迁移,原始存储都不会发生任何事情,除非迁移完成而没有错误。只有迁移成功,Core Data才能删除原始数据存储。
迁移类型
-
轻量级迁移
苹果公司的一个轻量级迁移是您的迁移工作量最少。只需在设置核心数据堆栈时启用几个标志,并自动进行迁移。对于可以更改数据模型的数量有一些限制,对于数据量小的使用此方式是最好的选择。 -
手动迁移
手动迁移需要您手动做一些工作。您需要指定如何将旧的数据集映射到新集上,但是您可以获得更明确的映射模型文件进行配置的好处。在Xcode中设置映射模型就像设置数据模型一样,具有类似的GUI工具和一些自动化功能。 -
自定义手动迁移
这种迁移复杂度稍微高一点。您仍然使用映射模型,但添加到该自定义代码,还可以在数据上指定自定义转换逻辑。在这种情况下,自定义实体转换逻辑涉及创建NSEntityMigrationPolicy子类,并在那里执行自定义转换。 -
完全手动迁移
即使指定自定义转换逻辑还不足以将数据从一个模型版本完全迁移到另一个模型版本时,使用全面手动迁移。在这种情况下,需要定制版本检测逻辑和迁移过程的自定义处理。
轻量级迁移
轻量级迁移只是在原来的数据的基础上拷贝一份, 并在心得数据模型上添加需要添加或删除的数据
首先打开 .xcdatamodeld文件, 人后选中你要迁移的实体
屏幕快照 2017-08-07 下午9.32.45.png
然后, 添加一个心得数据模型版本, 并命名为UnCloudNotesDataModel v2
屏幕快照 2017-08-07 下午9.33.33.png更改需要加载的版本
屏幕快照 2017-08-07 下午9.36.14.png
此时你将会看到在未进行数据迁移之前, 数据模型上被标注为绿色的对号现在标记到了我们心得数据模型上
屏幕快照 2017-08-07 下午9.36.47.png然后在新的数据模型上天机一个属性
image, 类型为Transformable
这样就完成了了轻量级的数据迁移
网友评论