NSInternalConsistencyException 原因 +entityForName:找不到实体名称的 NSManagedObjectModel

Posted

技术标签:

【中文标题】NSInternalConsistencyException 原因 +entityForName:找不到实体名称的 NSManagedObjectModel【英文标题】:NSInternalConsistencyException reason +entityForName: could not locate an NSManagedObjectModel for entity name 【发布时间】:2011-03-12 10:11:21 【问题描述】:

正在使用界面生成器创建视图控制器,并将 NSManagedObjectContext 传递给它,一切都很完美。但是我一直收到错误,好像我没有设置什么一样。

我发布这个是因为没有其他问题可以解决这个问题,但希望其他人能从中受益。

在使用硬代码而不是 IB 之后,我注意到根视图控制器的视图在 App Delegate 之前被调用。这完全打乱了预期的顺序。 NSLog 向我展示了现在什么是最先发生的。

很多时候,我严重质疑 Apple(缺乏)使用英语语法,或者以任何正常人所期望的方式做事。就像 iPad 的应用商店没有在相关程序上显示全名一样,这就是其中之一。

所以是的,如果您使用的是 NIB,请对 addSubview 部分进行硬编码,而不是在 Interface Builder 中进行链接。即使您正确链接它,也要对根视图控制器进行硬编码。或者,有更多经验的人可以发布另一个解决方案...... 我可能会离开,或者甚至离开,但如果是这样的话......责备苹果公司假设任何阅读教程的人都需要“在文档中写的一种方式”。

Core Animation 遭受同样的缺失信息和链接。好的,现在我在抱怨苹果。不过,如果这个问题得到了解决,我很抱歉,但我发现的所有问题都是拼写错误和“未链接”。我做了所有提到的事情,但仍然没有,这非常令人困惑。

谢谢!

【问题讨论】:

在责怪 Apple 之前,我会检查您传入 entityForName:inManagedObjectContext: 的 NSManagedObjectContext 是否不为零。 我不会否决这个“问题”,但它所描述的问题和解决方案非常可疑。即使是这样,您也可能希望提供更多详细信息,以便其他人能够准确了解正在发生的事情。 我尝试使用 Nib 加载所有内容,以便视图与 MVC 模式保持一致。这个问题和解决方案在任何地方都找不到。我发布了它,以便其他人在遇到它时可以找到它并获得帮助。主要的偏差是我没有硬编码它。但是,我的代码与我链接的内容相匹配(Nibwise),我不确定在很多方面发生了什么。 【参考方案1】:

我注意到根视图 之前调用了控制器的视图 应用代表...

那是不可能的。必须先调用应用程序委托的application:didFinishLaunchingWithOptions:,然后才能激活任何视图。整个显示窗口由应用程序代理拥有,因此如果应用程序代理尚未加载,则没有可加载视图的窗口。

我已经使用 IB、Core Data 以及多种类型的视图和视图层次结构创建了数十个应用程序,并且在应用程序委托之前从未遇到过视图加载。你错过了什么。

错误:

NSInternalConsistencyException 原因 +entityForName: 找不到实体名称的 NSManagedObjectModel

... 要么表示您的 managedObject 模型尚未加载,要么表示您拼写错误的实体名称。听起来您的核心数据堆栈要么未加载,要么您访问不正确。

【讨论】:

我在两者中都插入了一个 NSLog,并且首先调用了来自 ViewDidLoad 的那个。我不能争辩,我只会说我亲眼目睹了它的发生。 iphonedevsdk.com/forum/iphone-sdk-development/… 常见问题 如果是这样,我会提交错误报告。这不应该发生。现在,顶视图的viewDidLoad 将在didFinishLaunch... 完成 之前调用,但我从未见过它在调用didFinishLaunch... 之前调用viewDidLoad。我的意思是,应用程序如何知道要加载哪个视图?视图如何找到它的窗口?【参考方案2】:

我也有同样的问题。奇怪的是,在 ios 5 上我遇到了问题,而在 iOS 6 上却没有。

一些挖掘表明,在 iOS 6 上,上下文似乎在我期望的时候就在那里,而在 iOS 5 上,它是空的(因此出现错误消息)。就我而言,我是通过 segue 放弃上下文的。一种解决方法是测试上下文是否为 nil,如果它是然后专门请求它。成功了。

这一定是 Apple 意识到的,因为它已针对 iOS6 进行了更改。

【讨论】:

以上是关于NSInternalConsistencyException 原因 +entityForName:找不到实体名称的 NSManagedObjectModel的主要内容,如果未能解决你的问题,请参考以下文章