CoreData渐进式迁移

渐进式迁移

创建MappingModel

创建一个迁移文件(.xcmappingmodel),指定需要迁移版本与目标版本。
在Mapping中可以使用NSEntityMigrationPolicy实现自定义数据迁移。

APP启动后,检测数据库是否需要迁移。

1. 调用NSPersistentStoreCoordinator,获取当前Model(NSManagedObjectModel)的MetaData
+(NSDictionary <NSString *,id> *)metadataForPersistentStoreOfType:(NSString *)storeType URL:(NSURL *)url error:(NSError * _Nullable *)error;
2. 调用当前NanagedObjectModel,比对MetaData是否兼容
- (BOOL)isConfiguration:(NSString *)configuration 	compatibleWithStoreMetadata:(NSDictionary<NSString *,id> *)metadata;
3. 开始渐进式迁移(递归处理)
  1. 获取当前NSManagedObjectModel的MetaData,比对当前NSManagedObjectModel,当相同的时候,跳出递归,即迁移完成。
  2. 从项目文件中,获取对应当前Model文件(momd),以及Model的所有版本文件(mom),并从Model版本中找出对应当前Model的版本。
  3. 从找到对应当前Model的迁移Mapping,以及迁移Mapping的目标版本。
  4. 根据当前Model版本和迁移Mapping目标版本创建NSMigrationManager
NSMigrationManager *manager = [[NSMigrationManager alloc] initWithSourceModel:sourceModel destinationModel:destinationModel]
  1. NSMigrationManager通过Mapping从当前Model版本迁移到目标Model版本
   BOOL didMigrate = [manager migrateStoreFromURL:sourceStoreURL
                                             type:type
                                          options:nil
                                 withMappingModel:mappingModel
                                 toDestinationURL:destinationStoreURL
                                  destinationType:type
                               destinationOptions:nil
                                            error:error];
  1. 进行递归,回到步骤一,直到当前Model版本与迁移目标Model版本相同。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值