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操作使用完全相同的数据集,并且共享相同的托管对象上下文。当一个线程保存时,上下文在一个线程上更新,从而将该集合标记为已修改。然后另一个线程进入,下一个访问触发这个错误。您需要确定您一次执行多少操作,确保所有操作都具有单一上下文,并且您没有为所有操作共享一个上下文。