如何在刚刚创建目标实体模型的 Coredata 中迁移实体

Posted

技术标签:

【中文标题】如何在刚刚创建目标实体模型的 Coredata 中迁移实体【英文标题】:How to Migrate an entity in Coredata where destination entity's model is just created 【发布时间】:2016-10-25 05:13:25 【问题描述】:

我有一个模特VersionVersion 的实体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 中迁移实体的主要内容,如果未能解决你的问题,请参考以下文章

“子类”核心数据模型

如何在 Coredata 中的相同实体之间创建多个关系?

如何在 coredata 中获取实体名称

如何在 XCTestCase 中测试 NSPersistentDocument?

核心数据 - 与目标规范共享模型?

我的核心数据实体在哪里?