2009-12-15 49 views
6

我一直在看核心數據的文檔,並試圖找出如何安排核心數據堆棧,以便它可以訪問我的所有UITableViewControllers。蘋果公司提供的所有例子都證明這是在AppDelegate上實現的,但文檔並不推薦這種方法,因爲它太隆起了!請參閱link困惑從AppDelegate獲取ManagedObjectContext

(爲什麼這不是iPhone SDK文檔上提的是另一個謎)

我的問題是,我已經反覆設計模式按在TopSongs檢索ManagedObjectContext實體顯示的核心數據示例子表格視圖和下面的錯誤產生...找不到實體名稱'宋'的NSManagedObjectModel。奇怪的是,這可以在父級表視圖中找到,所以我認爲這是因爲AppDelegate上的核心數據堆棧已經處理好了。

有沒有人知道一個很好的例子,遵循不同的設計模式,以創建在Recipies,CoreData書籍和位置?所有這些都遵循相同的模式。

我想要做的就是檢索原始數據,並在chid tableview中對不同的條件進行排序。

回答

4

有關於人們喜歡將核心數據堆棧放置在this question中的重要討論。我傾向於把堆棧放在一個單例中(正如我在那裏指出的那樣)。這使您可以在應用程序中隨時隨地訪問堆棧。

至於你的問題,我發現你的核心數據堆棧的元素已被釋放的可能性很小。首先,你會發送消息到你的上下文或模型,而不是回收你現在的報告。如果您可以從應用程序中的其他位置訪問「歌曲」實體,我敢打賭,您並未正確地將模型傳遞到需要它的實例。

+1

Brad我也喜歡單例方法我已經傾向於在大多數應用程序中使用單例來處理應用程序狀態 - 蘋果公司的例子並沒有讓它看起來那麼簡單。 – paulthenerd 2009-12-15 19:09:48

+0

將核心數據放在單例中正是我的直覺告訴我的。蘋果公司把它放在應用程序委託上的例子似乎過於複雜,無法從第一個視圖控制器以外的其他任何東西進行管理。謝謝。我相信重組該項目將解決這個問題。 – Jim 2009-12-16 00:02:38

+0

我剛剛按照Apple的設計指南完成了一個實現,但它感覺不對。下次我也會採用單例方法。 – mvexel 2010-01-15 12:42:54

0

您在這裏遇到的問題是因爲您尚未在您的對象模型中聲明一個名爲歌曲的實體......您所遵循的模式與此無關......我建議您閱讀核心數據和對象模型here。希望對你有所幫助

1

IIRC蘋果示例初始化App Delegate中的Core Data堆棧,但他們實際上在視圖控制器上設置了屬性來引用ManagedObjectContext並設置應用程序負載 - 蘋果文檔在我閱讀時提到的是什麼這是你應該做類似的事情,而不是直接從App Delegate中加載ManagedObjectContext。

如果您發佈了一些代碼,將會更容易幫助您找出錯誤發生的原因。我要檢查的第一件事是你的控制器中對ManagedObjectContext的引用不是零。

+0

謝謝,這是有道理的。我拿它可以再次調用一個新的ManagedObjectContext一個後續的viewController? – Jim 2009-12-15 18:23:23