我在使用NSOperations的多線程應用程序中遇到了一些與CoreData一起工作的麻煩。我通過MagicalRecord(2.0.3)如下使用嵌套ManagedObjectContexts:當使用NSOperations時兄弟NSManagedObjectContexts
Root Context (saves to disk)
|
Main Thread Context (for populating the UI)
|
Sub-Context(s) (used to add/edit/remove data)
我有一個單一的NSOperationQueue來處理所有的數據處理。
大部分情況下,我可以異步下載數據,然後將其提供給NSOperation,然後將其寫入其中一個子上下文。在操作結束時保存將更改推送到主要上下文和UI更新。大!
問題是,如果一個子上下文刪除一個實體並保存(推送到主上下文),則兄弟子上下文仍然會認爲它存在。那麼,如果一個兄弟會試圖讓實體發生故障並將其從它的父母(主環境)中拉出來,我就會崩潰。
我有2個問題:
- 我應該使用MOC通知合併更改推到主MOC回到它的其他孩子?我這個,並得到另一個崩潰...
- 我應該甚至有mutltiple子上下文? MOC應該與單個線程相關聯(MagicalRecord有助於自動執行此操作),並且我有一個用於保存數據的NSOperationQueue,所以我不應該只有1個子上下文嗎?我已經驗證過,有時我的保存是由不同的上下文執行的。
我會很感激任何意見。謝謝。
我也在尋找重置,但很謹慎。我會試試看它是如何執行和回發的。謝謝! – brianpartridge 2012-07-30 19:15:41
終於嘗試了它,調用'重置'修復了這個問題。 – brianpartridge 2012-08-01 00:46:02