2

我正在編寫基於CoreData的iPad烹飪應用程序。 在我的應用我有一個屏幕,與2種信息編輯配方:mergeChangesFromContextDidSaveNotification中同步上下文時的核心數據崩潰(EXC_BAD_ACCESS)

  1. 列出與處方類\子類別和國家
  2. 所有其他配方相關的信息

每個這份名單可能會在popover中編輯。這個列表的變化應該立即堅持(即如果用戶將某些配方類別添加到可能的類別列表中,但取消了配方創建,則該類別應可用於所有配方)。 它descided實施2個獨立的NSManagedObjectContexts處理每種類型的信息的:主要方面用於配方管理和支持方面的名單。

通過MagicalRecord框架執行的所有核心數據操作。這兩個上下文都有MagicalRecord的默認上下文作爲父項。每個上下文都觀察另一個上下文的變化。所有上下文正在創建和使用主線程因此,似乎這個問題沒有任何關係到多線程問題。

當我試圖在支持上下文中創建對象並在對象創建後立即在支持上下文中保持更改時,一切都會正常進行。新創建的對象在創建後立即被刪除 - 收到EXC_BAD_ACCES時就會出現問題。 但是,實體正在持續保持正確,並且在下次啓動時可以使用並刪除它,而不會出現同步問題。

1注意:當從訪問對象時通過existingObjectWithID主要內容:NSManagedObjectContext的方法可以刪除此對象。然而,崩潰發生在主要上下文(Main和Supporting上下文的父上下文)上。

這裏是我的代碼:

實體創建:

RecipeCategory* category = [RecipeCategory MR_createInContext:_supportingContext]; 
category.name = itemName; 
[_supportingContext MR_saveToPersistentStoreAndWait]; 

實體刪除:

[(RecipeCategory*)itemToRemove MR_deleteEntity]; 
[_supportingContext MR_saveToPersistentStoreAndWait]; 

上下文的創建和觀察設置:

[_mainContext MR_stopObservingContext:_supportingContext]; 
[_supportingContext MR_stopObservingContext:_mainContext]; 
_mainContext = [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]]; 
_supportingContext = [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]]; 
[_mainContext MR_observeContextOnMainThread:_supportingContext]; 
[_supportingContext MR_observeContextOnMainThread:_mainContext]; 

請諮詢什麼情況CAU這個問題,因爲現在我很困惑,即使我應該採取哪種行動來解決這個問題。核心數據文檔中的更改管理部分沒有提供任谷歌同樣的結果。

問候,Ilia。

回答

0

不要這樣做。觀看另一個觀察者的上下文......這很糟糕。您首先需要了解嵌套上下文的規則以及數據在保存時如何從一個流向另一個流。

我的情況是,您可能需要查找NSMOC上的MR_confinementContext方法。這將創建使用舊線程約束模型的上下文。這可能有助於避免線程崩潰。但首先,不要做圓形觀察...數據流在

+0

我刪除了環境觀察的上下文。現在只有主要的手錶支持變化。但是這並沒有幫助,崩潰仍然存在。順便說一句我發現這個問題的一些解決方法:如果對於我的上下文(主要和支持),我將父母設置爲MR_rootSavingContext一切都開始工作正常。但是,似乎它不會成爲我使用它的解決方案,因爲還需要iCloud支持,MR_defaultContext是負責這一點的人員。 – 2013-02-27 14:06:01

+0

您還指出了嵌套上下文的規則以及數據如何相互流動的方式 - 請您指出一些文章?在谷歌搜索大多數給我有關核心數據多線程問題的文章。 – 2013-02-27 14:12:51

+0

不幸的是,現在最好的文檔是關於核心數據的WWDC視頻。你應該可以通過一個基本的蘋果開發者賬戶進行檢查。我仍然會避免使用核心數據來支持iCloud ......這對他們來說是相當糟糕的...... – casademora 2013-02-27 15:13:48