1

我有一個MagicalRecord,NSOperationsQueues和NSURLRequests的問題。NSOperationQueues與MagicalRecord和NSURLRequests

我得到一個模型,通過MagicalRecord處理從CoreData獲取的數據。這工作得很好,但我想有一個後臺進程來通過NSURLRequest通過我的API從Web獲取數據。這是主要問題。我必須將scheduleInRunLoop:forMode設置爲NSURLConnection[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

從我的模型到NSOperationQueue的回調現在由主線程處理並且一切正常。

我想通過MagicalRecord將提取的資源保存到CoreData中。我在我的NSOperationQueuestart方法中設置了我的[NSManagedObjectContext MR_contextForCurrentThread]以處理NSOperationQueue中當前線程的保存。

我現在面臨的主要問題是我撥打[self.localContent MR_saveToPersistentStoreWithCompletion:]帶有一個完成塊,等待CoreData將其保存到PersistentStore。

但是在這一點上完成塊從來沒有被調用,我不能更新我的NSOperationQueue完成。

我到底做錯了什麼?

[的NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:完成:]

如果我在的DefaultContext它保存我的應用程序下面的語句隨機崩潰_ block_invoke3致命異常 NSGenericException *收藏< __NSCFSet :枚舉時,0x1d0490c0>發生了變異。

的NSOperation低優先級的併發限制隊列墜毀

- [的NSManagedObjectContext(_NSInternalChangeProcessing)_processRecentChanges:] EXC_BAD_ACCESS

我知道這是因爲訪問和保存在同一時間在同一背景下,但我不想解決這個問題。

我使用MagicalRecord

回答

0

最新版本的從你的描述有限,缺乏實際的代碼,我可以提供的是,你從另一個線程變異的一套。很可能,您有多個NS操作使用完全相同的數據集,並且共享相同的託管對象上下文。當一個線程保存時,上下文在一個線程上更新,從而將該集合標記爲已修改。然後另一個線程進入,下一個訪問觸發這個錯誤。您需要確定您一次執行多少操作,確保所有操作都具有單一上下文,並且您沒有爲所有操作共享一個上下文。