CoreData:“NSInternalInconsistencyException”,原因:“+entityForName:无法在此模型中找到名为“DocumentLocations”的实体。

Posted

技术标签:

【中文标题】CoreData:“NSInternalInconsistencyException”,原因:“+entityForName:无法在此模型中找到名为“DocumentLocations”的实体。【英文标题】:CoreData: 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an entity named 'DocumentLocations' in this model.' 【发布时间】:2011-10-05 19:02:57 【问题描述】:

我突然被一个奇怪的问题绊倒了。我有一个相当广泛的 CoreData 数据模型,我已经将它(以及包含它的项目)复制到一个新项目中,用于我正在研究的原型。我得到了它的工作,并且正在混合和匹配新的实体和属性。

突然,不知何故,我突然收到以下错误:

'NSInternalInconsistencyException',原因:'+entityForName: 在此模型中找不到名为“DocumentLocations”的实体。'

我深入研究了创建 NSManagedObjectContext、NSPersistentStoreCoordinator 和 NSManagedObjectModel 的整个过程,并且已经很清楚没有加载对象模型。我执行以下命令:

_managedObjectModel = [[NSManagedObjectModel mergeModelFromBundles:nil] 保留];

但是当我在加载后查找模型中的实体时(如果您将 nil 传递给 mergeModelFromBundles,则此方法从主包创建模型),什么都没有。

Xcode 或模拟器似乎看不到我的 xdatamodel 文件。我完全不知道为什么不。我将尝试通过一个 URL 显式加载它来强制解决这个问题,但我不确定它是如何工作的。

有什么线索吗? CoreData 问题绝对令人费解。随着时间的推移,我已经设法解决了其中的大部分问题,但这个令人头疼。

编辑:亚历克斯想通了。我只是想知道模型是如何从 Xcode 的“编译源”列表中删除的。希望 Xcode 更可靠。真的可以当 PITA。

【问题讨论】:

您确定正在将 xcdatamodel 复制到您的应用中吗?仅将其添加到项目中可能还不够,因此您可能还需要检查构建设置以确保它被包含在内。您还可以在文件系统上跟踪您构建的 .app 包并打开它以查看是否包含数据模型文件。 哇。那太棒了。我唯一的问题是:它到底是怎么被删除的????万分感谢。希望我昨天就知道了。会为我节省大量时间。现在我要回去调试我的 /other/ 问题了!再次感谢。 将数据模型文件添加到当前构建目标(右侧边栏) @MartinBrugger 是的。一旦亚历克斯确定了问题所在,我就这样做了。它奏效了。我只是不明白它是如何被删除的。据我所知,我没有做任何事情来促进这一点。我总是假设 EBSAK,但有时 Xcode 会表现在... 奇怪 .... 我如何确定@Alex 的答案是正确的? 【参考方案1】:

@Alex 想通了。出于某种原因,xdatamodel 已从构建设置中删除。我把它加回去了,它起作用了。我真的不明白为什么它会首先被删除。它实际上在一个构建和下一个构建之间消失了。

【讨论】:

【参考方案2】:

通过从模拟器和我的 iPhone 中删除应用程序来解决此问题。

显然,在早期运行时添加了没有实体的数据库。然后,一旦我添加了实体并将所有内容连接起来,就开始收到类似于上面的错误...

删除应用程序允许重新创建数据库并修复问题。

【讨论】:

以上是关于CoreData:“NSInternalInconsistencyException”,原因:“+entityForName:无法在此模型中找到名为“DocumentLocations”的实体。的主要内容,如果未能解决你的问题,请参考以下文章

CoreData与CloudKit同步时将图像保存到CoreData?

RestKit + CoreData:从CoreData缓存中排除某些对象

Coredata — 入门使用

认识CoreData—初识CoreData

Coredata 单表简单使用

iOS CoreData