2011-03-12 43 views
1

正在使用接口构建器创建视图控制器,并将NSManagedObjectContext传递给它,完成所有工作。但我不断收到错误,好像我没有设置任何东西。NSInternalConsistencyException reason + entityForName:找不到实体名称的NSManagedObjectModel

我发布这个,因为没有其他问题解决这个问题,但希望其他人会受益。

在使用硬代码而不是IB之后,我注意到根视图控制器的视图在应用程序委托之前被调用。这完全搞乱了预期的订单。 NSLog向​​我展示了现在的第一件事。

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

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

核心动画遭受相同的缺失信息和链接。好吧,现在我正在咆哮着苹果。不过,如果这个问题得到解决,我表示歉意,但我发现的所有问题都是拼写错误和“不连接”。我做了所有提到的事情,但它仍然没有,这很混乱。

谢谢!

+1

在指责苹果之前,我会检查你在'entityForName:inManagedObjectContext:'中传入的NSManagedObjectContext不是零。 – 2011-03-12 10:18:51

+0

我不会低估这个“问题”,但它描述的问题和解决方案非常可疑。即使是这样,您可能想要提供更多细节,以便其他人可以准确理解发生了什么。 – TechZen 2011-03-12 22:56:18

+0

我试图加载所有使用Nib的视图来保持与MVC模式一致。这个问题和解决方案在任何地方都找不到。我发布了它,以便其他人可以找到它并在它遇到它时获得帮助。主要的偏差是我没有对它进行硬编码。但是,我的代码与我所链接的代码(Nibwise)相匹配,我不确定在很多方面发生了什么。 – fightingshadow 2011-03-14 05:19:39

回答

0

I noticed that the root view controller's view was called before the App Delegate...

这是不可能的。应用程序代理的application:didFinishLaunchingWithOptions:必须在任何视图可以激活之前调用。整个显示窗口由应用程序委托所有,所以如果应用程序委托尚未加载,则没有视图加载到的窗口。

我已经创建了数十个包含IB,核心数据和许多类型的视图和视图层次结构的应用程序,从未在应用程序委托之前看到过载入视图。你错过了一些东西。

错误:

NSInternalConsistencyException reason +entityForName: could not locate an NSManagedObjectModel for entity name

...要么意味着你的managedObject模式没有加载或您拼写实体名称错误。这听起来像你的核心数据堆栈要么不加载,要么你错误地访问它。

+0

我在两个版本中都推出了NSLog,并且首先调用了ViewDidLoad中的一个。我不能争辩说,我只会说我看过它发生。 – fightingshadow 2011-03-14 05:14:26

+0

http://www.iphonedevsdk.com/forum/iphone-sdk-development/11537-viewcontroller-called-before-applicationdidfinishlaunching.html常见问题 – fightingshadow 2011-03-14 06:53:13

+0

如果是这样,我会提交一个错误报告。这不应该发生。现在,顶部视图的'viewDidLoad'将在'didFinishLaunch ...'***完成***之前被调用,但是我根本没有看到它在调用'didFinishLaunch ...'之前调用viewDidLoad。我的意思是,应用程序如何知道要加载哪个视图?视图如何找到它的窗口? – TechZen 2011-03-14 22:00:17

0

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

一些挖掘发现,在iOS 6上下文似乎在那里,当我在iOS 5上它是空的(因此是错误消息)。在我的情况下,我通过一个segue来放弃上下文。解决方法是测试上下文是否为零,如果是,则特别要求它。诀窍了。

这一定是苹果公司已经知道的,因为iOS6已经改变了。

相关问题