【发布时间】:2015-08-19 14:58:29
【问题描述】:
我正在使用 MagicalRecord 来管理我的核心数据。我的应用程序经常接收需要迭代的数据块,然后作为记录单独添加到存储中并保存。我将此代码放入 NSOperation 中。它看起来像这样:
class AddIncomingMessageOperation: NSOperation {
override func main() {
let context = NSManagedObjectContext.MR_context()
self.message = Message.createMessage(
json: self.messageJSON,
context: context)
if self.message != nil {
context.MR_saveToPersistentStoreAndWait()
}
}
}
在NSOperationQueue.mainQueue 上运行它似乎没有问题,除了阻止 UI。但我的下一步是在他们自己的后台操作队列上运行所有这些操作。将它们添加到这个 NSOperationQueue 并运行它们会导致一些混合数据。
我的意思是——我的 createMessage 函数检查现有的 Conversation 对象,如果存在则将其添加到对话中,如果不存在则创建一个。所以它需要知道商店中已经存在的东西。当他们在后台队列上运行时,似乎正在发生的事情是他们正在创建刚刚在另一个操作中创建的对话。
我可以通过设置operationQueue.maxConcurrentOperationCount = 1 来解决所有这些问题,但这显然会减慢整个过程的速度。
【问题讨论】:
标签: ios core-data nsoperation nsoperationqueue magicalrecord