【发布时间】:2013-07-16 15:09:55
【问题描述】:
我对 MagicalRecord、NSOperationsQueues 和 NSURLRequests 有疑问。
我得到了一个模型,它通过 MagicalRecord 处理从 CoreData 获取的数据。那工作正常,但我希望有一个后台进程来通过我的 API 从网络通过 NSURLRequest 获取数据。这是主要问题。我必须将NSURLConnection 上的scheduleInRunLoop:forMode 设置为[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
从我的模型到 NSOperationQueue 的回调现在由主线程处理,一切正常。
我想通过 MagicalRecord 将获取的资源保存到 CoreData。我在NSOperationQueue 的start 方法中设置了[NSManagedObjectContext MR_contextForCurrentThread],以处理来自NSOperationQueue 的当前线程中的保存。
我现在面临的主要问题是我使用完成块调用[self.localContent MR_saveToPersistentStoreWithCompletion:] 以等待CoreData 将其保存到PersistentStore。
但此时完成块永远不会被调用,我无法更新我的 NSOperationQueue 以完成。
此时我到底做错了什么?
如果我将它保存在 defaultContext 中,我的应用程序会随机崩溃并显示以下语句:
[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:]_block_invoke3 致命异常 NSGenericException * 集合 <__nscfset:> 在枚举时发生了变异。
NSOperation 低优先级并发限制队列崩溃
-[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] EXC_BAD_ACCESS
我知道这是因为在相同的上下文中访问和保存相同的时间,但我不知道解决这个问题。
我正在使用最新版本的 MagicalRecord
【问题讨论】:
标签: multithreading core-data nsurlrequest nsoperationqueue magicalrecord