2011-03-12 100 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已經改變了。

相關問題