我的应用程序进行了大量从某种格式到 NSManagedObject
的大量转换,所以对我来说最好的方法是使用 NSOperation
(或 Operation
在 Swift 3) 中进行从原始数据到 NSManagedObject
的转换,并在所有操作完成后保存该上下文。
我不能为每个 Operation
使用单独的上下文,因为我的转换器生成关系(并且它们只能从相同的上下文访问)并且应用程序可能运行多达 20 次转换,所以它不是创建新上下文并在每次转换后保存它很酷。
所以我需要创建单独的 OperationQueue
并确保其中的所有操作都是从与上下文相同的线程执行的,我不知道该怎么做。
我只有一个想法:在 Operation.main()
中启动所有内容作为 context.perform { }
,但我真的不认为这是一个好的解决方案.
我找到了 similar thread at Stackoverflow ,但答案已过时,我发现接受的答案显然不正确。
最佳答案
使用您自己的操作队列不是最好的方法。对于 Core Data,您需要通过 mainQueueConcurrencyType
或 privateQueueConcurrencyType
使用内置的 Core Data 并发,然后使用 perform
或 performAndWait
。使用您描述的自定义操作队列将无法正常工作。
这将使用由 Core Data 管理的调度队列。您无法直接计算未决操作的数量,但您可以一次添加一堆 block ,最后一个 block 在导入过程完成时执行任何需要发生的事情。在导入过程中保存而不是仅在最后保存也是一个好主意,以防止内存使用失控,除非您只导入少量数据。
关于objective-c - 用于核心数据操作的 NSOperation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42097866/