Core Data轻量级迁移错误

Posted

技术标签:

【中文标题】Core Data轻量级迁移错误【英文标题】:Core Data lightweight migration error 【发布时间】:2014-05-11 06:37:17 【问题描述】:

我一直在努力让核心数据轻量级迁移工作。遇到了一个非常棘手的问题。 我已经像文档和其他SO posts 一样设置了自动轻量级迁移。然后我创建一个新版本,将其选为当前版本,向某个实体添加一个新字段,然后运行。 出现错误:

迁移失败,出现错误 Error Domain=NSCocoaErrorDomain Code=134140 “无法完成操作。(Cocoa 错误 134140。)” UserInfo=0xce08c10 reason=找不到或自动推断迁移的映射模型,

还有一个错误:

NSUnderlyingError = "Error Domain=NSCocoaErrorDomain Code=134190 \"The operation couldn\U2019t be completed. (Cocoa error 134190.)\" UserInfo=0xcdf2d00 reason=Each property must have a unique renaming identifier";

我已经搜索了一段时间“每个属性都必须有一个唯一的重命名标识符”,但根本没有找到任何结果。

从这个错误信息的含义来看,属性应该有唯一的重命名标识符。我回到我的模型设置,发现我确实有一些完全相同的重命名标识符。

我的问题是我根本没有真正更改型号名称。我只是添加一个新字段。我认为重命名标识符仅在尝试重命名某些内容时才有用。或者,无论如何它都是必需的。如果是这样,那为什么 XCode 没有给我们任何警告或错误呢? XCode不应该很明显吗?

欢迎提出任何建议。

【问题讨论】:

模拟器或设备测试? 你能告诉我你做了什么来解决这个问题吗?我面临同样的问题,不知道是什么原因造成的。 如果我没记错的话,您需要确保没有属性具有相同的重命名标识符。 您应该在使用修改后的版本运行之前清理以前的构建。 【参考方案1】:

回复过去的帖子,但遇到此无法找到或自动推断迁移映射模型问题的人不止您一个。

所以,我在一个有 12 个模型版本且只有轻量级迁移的大型项目中遇到了同样的问题。刚刚重命名了 2 个属性,直到今天一切正常。

我发现的唯一解决方法是在我最后的两个模型版本之间向我的项目添加 映射模型(新文件 => 核心数据 => 映射模型)。 我希望我不必为每个新模型更新添加一个。对我来说,这似乎是 Core Data 中的一个迁移错误。

希望这将帮助其他人解决此错误。

但发生在 ios 8 / iOS 9 设备上

【讨论】:

我在将新属性添加到 BaseObject 时遇到了这个问题,数据库中的所有其他对象都继承自它。我已经按照您的建议创建了一个映射模型,并且无需更改自动生成的文件中的任何内容,迁移就成功了。【参考方案2】:

我认为迁移不适用于模拟器。在对托管对象模型进行更改后,我总是必须从模拟器中删除应用程序并重新开始。

在已设置旧版本的设备上进行测试安装,以确保您的迁移成功。

【讨论】:

没有理由无法在模拟器中进行迁移。就 Core Data 而言,它是完全相同的环境。 如果你这么说。我记得很早就在模拟器中遇到这个问题。从那以后一直在更改妈妈时删除。 在我确保没有属性具有相同的重命名标识符后,迁移在模拟器上运行良好。

以上是关于Core Data轻量级迁移错误的主要内容,如果未能解决你的问题,请参考以下文章

Core Data轻量级迁移有多少个迁移步骤?

Core Data(iPhone)实现“自动轻量级迁移”

考虑使用 Core Data 轻量级迁移的多个数据模型版本

Core Data 的推断映射模型创建(轻量级迁移)崩溃。线程问题?

Core Data 轻量级迁移后执行自定义代码

iOS Core Data 不执行轻量级迁移