2012-08-08 55 views
0

所以我在Cocoa中構建了一個基於文檔的應用程序,並試圖理解NSManagedObjectContext。我已經閱讀過蘋果的「核心數據基礎」,但無法將其包圍。在我的應用程序創建一個自定義CoreDataUtility類,這樣我所有的類都可以通過下面的代碼行獲取上下文:基於文檔的可可應用程序的多個上下文?

MyCoreDataUtility *coreData = [MyCoreDataUtility sharedCoreDataUtility]; 
NSManagedObjectContext *context = [coreData context]; 

我有這個想法從網站「可可是我的女朋友」。當我運行我的應用程序並創建一個新窗口(我的文件所有者類是NSPersistentDocument的一個子類)時,如果我在新窗口上更改了上下文,該視圖反映了舊窗口上的更改,以及新的一樣。基於此,我假定兩個窗口都以某種方式引用相同的上下文或至少相同的數據。

所以我的問題是:

  1. 我的假設是每個我創建了一個新的 上下文中創建一個新的窗口,時間是否正確呢?
  2. 如果創建了一個新的環境,他們是不同的(其實我 打印出兩個上下文的內存地址和他們 地址是不同的),這是否有東西做的 持久存儲區協調員或持久對象存儲(這兩個概念在我看來也是模糊不清的)?
  3. 如果所有文檔都提及相同的上下文,那麼我的責任是 每次創建文檔時都要創建一個新的上下文?

謝謝大家!

回答

0

我有一個假設,每次創建一個新窗口時創建一個新的 上下文,這是正確的嗎?

不,是的。創建一個新窗口並不會創建一個新的上下文,但我認爲您所看到的「新窗口」實際上就是您「創建新文檔」的操作。在使用CoreDate的基於文檔的應用程序中,您可能擁有一個持久存儲區,它自己爲每個文檔創建一個新的上下文。

這也是第二個問題的答案。商店協調員只是管理應用程序的所有文檔的中心點。它會處理一些菜單相關的操作,例如打開,保存和所有副作用。

如果所有證件是指相同的上下文是我的責任, 創建新的上下文每次創建文檔時?

這是不可能的。一個上下文可以僅與一個文件(或「存儲」)相關,因此每個文檔必須具有「至少」一個上下文。如果您將模板用於基於CoreData和Multi-document的應用程序,則不必擔心創建新的上下文。正如我之前所說的,商店協調員會照顧到這一點。但是,當您更多地瞭解CoreData時,特別是如果您執行多線程,則必須創建多個上下文,因爲上下文無法跨線程。

你可以提供可可的鏈接是我的女朋友在哪裏你拿了代碼?看起來你想要一個單例存儲你的上下文,並且通常在基於文檔的應用程序中這是一個壞主意,因爲將一個函數混淆爲一個不同文檔的上下文是非常容易的。上下文通過後,您的應用程序應該具有良好的流程。但是,如果我的應用程序不是基於文檔的,我總是使用單例。

+0

謝謝弗朗西斯科......對不起,在回覆此主題時丟球。 – schmudu 2012-10-03 18:32:38