如何进行核心数据迁移?

Posted

技术标签:

【中文标题】如何进行核心数据迁移?【英文标题】:How can i do core data migration? 【发布时间】:2019-03-22 21:15:00 【问题描述】:

我有一个旧的核心数据版本,在二进制数据中带有 Allows external storage。我创建了一个新的 Allows external storage 未选中。当我尝试启动我的应用程序时出现错误:

未解决的错误

Error Domain=NSCocoaErrorDomain Code=134140 "无法执行该操作 完全的。 (可可错误 134140。)“用户信息=0xbd5cd20 原因=不能 查找或自动推断迁移的映射模型, 目的地模型=...

然后我在我的项目中创建了一个新文件 - Model.xcmappingmodel。我选择了源数据模型和目标数据模型。

然后我看到了

NSPersistentStoreCoordinator 错误:NSPersistentStoreCoordinator _coordinator_you_never_successfully_opened_the_database_schema_mismatch

【问题讨论】:

【参考方案1】:

对于未来的上下文...从 ios 12 开始,写入 CoreData 的外部存储已被破坏。我的解决方案基于 Twitter 上 Drew McCormack 的 cmets。

值得注意的是,只有写入被破坏,读取仍然有效。

创建一个新属性,例如«original property name»Internal,其类型相同但Allows external storage未选中

您现在有两个选择:

在应用程序初始启动时迁移所有内容 - 即使用类似 «original property name»Internal == NULL && «original property name» != NULL 的谓词获取所有对象并移动数据(我这样做了)。 即时迁移,即并行使用这两个属性,但只写入«original property name»Internal(而niling «original property name»

最后一次值得注意的是,在客户更新数据之前,您的客户数据是安全的。小心翼翼,但你应该没问题。

【讨论】:

以上是关于如何进行核心数据迁移?的主要内容,如果未能解决你的问题,请参考以下文章

轻量级迁移核心数据

核心数据版本控制和迁移

在核心数据中进行大量迁移后尝试保存数据

使用自定义 NSEntityMigrationPolicy 进行核心数据迁移 - 效率?

将旧数据模型文件复制到新项目中进行轻量级核心数据迁移

核心数据迁移要求