2011-08-20 52 views
0

在另一個問題(Accessing an NSApplications delegate in another class?)中,我詢問有關調用應用程序的委託,因爲我需要它的managedObjectContext作爲獲取請求。但是,當我嘗試讓應用程序啓動時在NSTableView中顯示所有值時,我遇到了問題。 DataController,我的NSTableViewDataSource,在我的應用程序委託調用它的applicationWillFinishStartup或任何其他方法來初始化managedObjectContext之前調用它的init方法。我究竟做錯了什麼?我還可以用已有的對象填充NSTableView嗎?在應用程序啓動時執行NSFetchRequest

回答

1

只能通過其吸氣器訪問managedObjectContext,即使是從DataController,如[appDelegate managedObjectContext]appDelegate.managedObjectContext也是如此。

您的managedObjectContext方法應自動設置託管對象上下文;你不應該在你的applicationDidFinishLaunching等中寫明確的moc設置例程。標準的核心數據模板就是這樣編寫的。

現在,爲了這個工作,應用代理需要從DataController的角度來正確設置。但是,在設置所有IBOutlet之前調用init,所以這是在筆尖內執行對象設置操作的錯誤位置。相反,使用awakeFromNib來做這些事情。 awakeFromNib等等全部設置後發送給每個對象。

這就是說,寫自己的DataController是完全浪費時間。只需在nib文件中實例化標準NSArrayController,並通過綁定在覈心數據模式中使用它。您絕對不需要自己編寫獲取請求。研究蘋果公司自己的CoreData示例代碼,然後谷歌「綁定CoreData教程」可以在線獲得許多教程。

+0

我已經將我的項目作爲zip文件上傳到了Dropbox。我希望它可以幫助:http://dl.dropbox.com/u/22139493/Shop%20Helper.zip在執行此操作之前,您可能希望在db中創建一些條目,因爲我刪除了一些行,每次添加一個新條目應用程序啓動 –

+0

好的,我會相應地重寫我的答案。 – Yuji

+0

謝謝。但是,我的應用程序旨在成爲核心數據的第一步,而不是真正具有特定用途。無論如何,謝謝你的提示 –

相關問題