Coredata推断的映射模型在我的旧数据库上失败了

时间:2012-02-22 01:43:29

标签: ios core-data

我正在为我的某个数据库使用CoreData,而且我在升级到我的应用程序时遇到了问题。

我的旧数据库不再加载...我收到错误“Cocoa error 134190”,我认为这意味着推断的映射模型失败。

当我开始编辑我的应用程序的这个版本时,我创建了一个新的模型版本,我只是向一个实体添加了一个新属性,并向另一个实体添加了两个新属性。没有任何内容被更改或删除。

我已经在我的App目录中查看了,所有的模型版本都在那里。

我甚至有我之前版本的应用程序的快照,有了这个快照,我可以加载我的核心数据文件。

为了调试出错的地方,我从我之前的快照中获取了确切的数据模型并在我当前版本中使用它,我仍然得到错误。

我甚至在我的“.app”目录包中的每个文件上都做了“diff”,并且两者之间只有两个不同的文件。一个是应用程序的实际二进制文件,另一个是“Info.plist”文件。我查看了Info.plist文件,它们基本相同(新版本有更新的捆绑版本,但没有其他更改)。

知道为什么推断映射被破坏了吗?

即使数据模型与我上一版本的数据模型完全不同,我也会收到相同的错误。

这非常令人沮丧。

关于如何追踪此类问题的任何信息也将非常感谢!!!

2 个答案:

答案 0 :(得分:0)

我找到了答案......问题是在我的新版本中,我正在重新排列文件的位置。我这样做只需将数据库移动到新位置即可。我没有意识到的是,coredata数据库对它们内置的路径有一些了解,你不能简单地移动它们。

我需要使用NSPersistentStoreCoordinator的方法更改数据库的位置:

migratePersistentStore:的toURL:选择:withType:错误:

我的错,但我真的希望核心数据错误信息不是那么神秘。

在我的应用程序的下一个版本中,我将完全删除核心数据。

罗恩

答案 1 :(得分:0)

我不认为核心数据实际上关心数据库文件的位置,但我可能错了。在我尝试推断模型映射的时候,我看到了这个错误,特别是“Cocoa错误134190”,实际上在尝试迁移到模型的下一个版本时出现了问题。

例如,当我今天发现这个帖子因为我正在帮助解决这个问题的人时,真正的根本问题是其中一个属性的类型被意外更改了。自动迁移无法处理这种变化。

查看两个模型版本之间的变化的一种简单方法是使用diff在命令行上区分描述文件:

diff yourNameHere.xcdatamodeld/yourNameHere5.xcdatamodel/contents yourNameHere.xcdatamodeld/yourNameHere4.xcdatamodel/contents 

(假设您有一个名为“yourNameHere”的核心数据模型描述,并且您正在查看从版本4迁移到5的问题。您必须针对特定文件进行调整。)在此差异中,您应该看到无论你添加了什么额外的东西,但是你真的在寻找类似于不应该改变的类型的东西。