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