Multithreading 带有MagicalRecord和NSURL请求的NSOperationQueues

Multithreading 带有MagicalRecord和NSURL请求的NSOperationQueues,multithreading,core-data,nsurlrequest,nsoperationqueue,magicalrecord,Multithreading,Core Data,Nsurlrequest,Nsoperationqueue,Magicalrecord,我对MagicalRecord、NSOperationsQueues和NSURLRequests有问题 我得到了一个模型,它通过MagicalRecord处理从CoreData获取的数据。这很好,但我希望有一个后台进程,通过NSURLRequest通过API从web获取数据。这是主要问题。我必须将NSURLConnection上的scheduleInRunLoop:forMode设置为[连接scheduleInRunLoop:[NSRunLoop mainlunloop]forMode:NSDe

我对MagicalRecord、NSOperationsQueues和NSURLRequests有问题

我得到了一个模型,它通过MagicalRecord处理从CoreData获取的数据。这很好,但我希望有一个后台进程,通过NSURLRequest通过API从web获取数据。这是主要问题。我必须将
NSURLConnection
上的
scheduleInRunLoop:forMode
设置为
[连接scheduleInRunLoop:[NSRunLoop mainlunloop]forMode:NSDefaultRunLoopMode]

从我的模型到NSOperationQueue的回调现在由主线程处理,一切正常

我想通过MagicalRecord将获取的资源保存到CoreData。我从我的
NSOperationQueue
start
方法中设置了我的
[NSManagedObjectContext MR_contextForCurrentThread]
,以处理从NSOperationQueue在当前线程中的保存

我现在面临的主要问题是,我使用一个完成块调用
[self.localContent MR_saveToPersistentStoreWithCompletion:
,等待CoreData将其保存到PersistentStore

但此时,从未调用完成块,我无法更新NSOperationQueue以完成

在这一点上我到底做错了什么

如果我将其保存在defaultContext中,我的应用程序会随机崩溃,并出现以下语句:

[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:][u block_invoke3致命异常 NSGenericeException *集合在枚举时发生了变异

NSOperation低优先级并发限制队列崩溃

-[NSManagedObjectContext(\u NSInternalChangeProcessing)\u processRecentChanges:] EXC_坏访问

我知道这是因为在同一个上下文中访问和保存同一时间,但我不想用它来解决这个问题


我使用的是MagicalRecord的最新版本,由于您的描述有限且缺乏实际代码,我所能提供的只是您正在从另一个线程中修改您的集合。最可能的情况是,您有多个NSO操作使用完全相同的数据集,并且共享相同的托管对象上下文。当一个线程保存时,上下文在一个线程上更新,从而将集合标记为已修改。然后另一个线程进入,下一次访问触发此错误。您需要确定一次触发的操作数,确保所有操作都有一个上下文,并且所有操作都不共享一个上下文