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