【问题标题】: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
【问题讨论】:
标签:
core-data
core-data-migration
【解决方案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»)
最后一次值得注意的是,在客户更新数据之前,您的客户数据是安全的。小心翼翼,但你应该没问题。