【问题标题】:How to Migrate an entity in Coredata where destination entity's model is just created如何在刚刚创建目标实体模型的 Coredata 中迁移实体
【发布时间】:2016-10-25 05:13:25
【问题描述】:
我有一个模特Version。 Version 的实体passPhrase 需要迁移到Home 模型中的新实体passPhrase。
但是Home 模型是在新版本的数据库中引入的。它在旧的xcdatamodel 中不存在。如何从
迁移数据
Version.passPhrase to Home.passPhrase
【问题讨论】:
标签:
ios
objective-c
core-data
core-data-migration
【解决方案1】:
CoreData 迁移的黄金法则是 - 不惜一切代价避免自定义迁移。 :)
因此,这样做的方法是使用轻量级迁移来添加您的新实体,然后只需使用一次性迁移脚本来移动您的数据。
您可以从Version 类定义中删除passPhrase 属性,但您现在需要将其保留在模型中,以便您仍然可以访问旧数据。当您确信您的所有用户都已升级到较新版本时,可以在将来的某个时间清除此问题,或者将其永远保留在那里。
要在复制过程中访问现有值,只需使用[version valueForKey:@"passPhrase"],然后在复制后以相同的方式清除它[version setValue:nil forKey:@"passPhrase"]
【解决方案2】:
在核心数据中,更改实体/模型映射不属于轻量级迁移。您必须通过继承 NSMigrationManager 并实现自定义 NSEntityMigrationPolicy 来手动处理它。
Apple 提供的有关该主题的文档很少。请查看Custom Core data migration 的详细示例。希望这会有所帮助。