2012-06-29 54 views
2

通常在單線程應用程序中,主管理對象上下文將駐留在AppDelegate中,我們可以通過appDelegate.mainMOC訪問它。但現在,蘋果公司推出了嵌套上下文(父母和子女),they're recommending的「接力棒」的方法:AppDelegate中的多個NSManagedObjectContexts

嵌套上下文使它比以往任何時候都更重要的是,你採用訪問的 「接力棒」的方式上下文(通過將上下文 從一個視圖控制器傳遞到下一個視圖控制器),而不是直接從應用程序代理檢索它 。

但我真的不知道如何引入嵌套上下文使其「比以往任何時候都更重要」。爲什麼我不能在AppDelegate中有三個上下文(masterMOC,mainMOC,extraMOC)?那會是什麼問題,爲什麼蘋果公司反對這種做法?

回答

3

首先,讓應用程序委託中的所有內容都是一個糟糕的主意。它打破了各種軟件設計規則。

話雖如此,這個想法是,你不想編寫代碼遍地都必須確切地知道哪些上下文的事情。隨着你提出的解決方案,所有的代碼將不得不知道使用moc1, moc2或moc3。這非常脆弱。

理想情況下,您將傳遞一個MOC到代碼,並且該代碼使用它給出的MOC。如果需要創建一個scratch,它可以創建一個傳遞給它的MOC的子進程(當然,假設MOC不是限制類型的)。

一種方法是傳遞對象,不用擔心確切的MOC。只需在必要時查詢託管對象的managedObjectContext屬性即可。

請注意,在應用程序委託中保留內容意味着您將其用作「廚房接收器」,並且在某些方面僅僅是榮耀的全局變量。

順便說一句,它比以前更重要,因爲更新的線程策略更加嚴格,並且如果線程錯誤,您的代碼幾乎可以保證可怕的死亡。