我将NSOperationQueue
设置为NSOperationQueueDefaultMaxConcurrentOperationCount
。它充满了NSOperation
个对象(到目前为止并不奇怪)。我将NSOperation
子类化为一些后台任务。
创建NSManagedObject:
[NSEntityDescription insertNewObjectForEntityForName:@“Channel”inManagedObjectContext:context];
使用上下文保存。
[managedObjectContext save:& error]
我喜欢这一切都发生在后台,因此UI不会被阻止。我读了this article about concurrency with core data,据我所知。最好的方法是在每个NSManagedObjectContext
中创建一个新的NSOperation
,但共享同一个持久性存储协调器。
然而,这很容易实现,当它保存文档中所说的上下文时,它容易出错。所以我的问题如下:
如果我在NSOperationQueue中运行了不同的操作,那么这些操作在保存托管对象上下文时是否会相互干扰?或者是否等待执行以下操作直到保存完成?
我可以安全地在NSOperation中保存上下文吗?或者这是不是很糟糕的做法?
我希望有人可以对这件事情发表意见,因为我现在真的陷入困境。
答案 0 :(得分:1)
您需要做的是:
另外,问问自己是否真的希望所有这些操作同时工作。根据文件:
默认的最大操作数由NSOperationQueue对象根据当前系统条件动态确定。
您无法控制同时运行的NSOperations数量。如果这不是你想要的,你可能会更好,如果你只是使用序列号NSOperationQueue(maxConcurrentOperation = 1),考虑到你要锁定数据库来进行保存,还因为你有网络连接完成了。
如果采取上述预防措施,您可以安全地保存在NSOperation的主要方法内。