Core Data系列六——Custom Migration

我的这篇文章里提到了,关于Core Data的数据迁移过程有两个维度可以自定制:

  1. 在迁移的过程中可以执行自定制的代码。通常是通过提供自己的migration policy类来实现。
  2. 可以自定制版本检测和迁移过程。指的是自己建立migration manager,判断是否需要迁移,以及控制迁移过程。

custom迁移过程则是从这两个维度进行了自定制。相对于定义从所有的历史版本到当前版本的mapping model, 更为合理的方式是渐进式迁移,即只定义从上一版本到当前版本的mapping model,渐进式地完成迁移过程。 这种方式的总体思路是:

  • 创建每个版本迁移到下一个版本的mapping model, 创建可能的NSEntityMigrationPolicy,
  • 创建并操作NSMigrationManager完成每一个版本的迁移

大致的流程图为:

迁移过程中有几个关键角色:

  1. NSMappingModel:提供了接口用于从指定的bundle中查找从source model到destination model迁移所需的.cdm文件,并根据文件创建mapping model
  2. MSMappingManager: 根据指定的source model、target model、mapping model, 对数据库文件执行迁移动作。具体的迁移过程是NSMigrationManager根据NSEntityMapping, 针对source instance创建对应的destination instance(s)
  3. NSEntityMapping: how to map an entity from a source to a destination managed object model;可以为每一个NSEntityMapping指定它所使用的NSEntityMigrationPolicy。在xcode中可以创建和编辑
  4. NSEntityMigrationPolicy: 其实例为一个具体实体映射的迁移策略。简单的说,这个类让我们不仅仅能修改实体的属性和关系,而且还能任意添加一些自定义的操作来完成每个实体的迁移

参考文档:
http://objccn.io/issue-4-7/

原文地址:https://www.cnblogs.com/mindyme/p/4966871.html