带有 NSOperation 的 MagicalRecord 导致持久性问题
MagicalRecord with NSOperation causing persistence issues
我正在使用 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 并 运行ning 它们然后会导致一些混合数据。
我的意思是 - 我的 createMessage 函数检查现有的 Conversation 对象,如果存在则将其添加到对话中,如果不存在则创建一个。所以它需要知道商店里已经存在的东西。似乎正在发生的事情是,他们 运行 在后台队列中创建刚刚在另一个操作中创建的对话。
我可以通过设置 operationQueue.maxConcurrentOperationCount = 1
来解决所有这些问题,但这显然会减慢整个过程。
您不能在后台线程上使用主线程上下文。不在 Core Data 中,也不在 Magical Record 中。
使用专为后台操作设计的MR方法,例如saveWithBlock
。使用 MR_newContext
创建背景上下文。
如果您使用这些简单的 API,您也许可以免除繁琐的 NSOperation
子类。
我正在使用 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 并 运行ning 它们然后会导致一些混合数据。
我的意思是 - 我的 createMessage 函数检查现有的 Conversation 对象,如果存在则将其添加到对话中,如果不存在则创建一个。所以它需要知道商店里已经存在的东西。似乎正在发生的事情是,他们 运行 在后台队列中创建刚刚在另一个操作中创建的对话。
我可以通过设置 operationQueue.maxConcurrentOperationCount = 1
来解决所有这些问题,但这显然会减慢整个过程。
您不能在后台线程上使用主线程上下文。不在 Core Data 中,也不在 Magical Record 中。
使用专为后台操作设计的MR方法,例如saveWithBlock
。使用 MR_newContext
创建背景上下文。
如果您使用这些简单的 API,您也许可以免除繁琐的 NSOperation
子类。