objective-c - 用于核心数据操作的 NSOperation

标签 objective-c swift core-data nsoperation nsoperationqueue

我的应用程序进行了大量从某种格式到 NSManagedObject 的大量转换,所以对我来说最好的方法是使用 NSOperation(或 Operation在 Swift 3) 中进行从原始数据到 NSManagedObject 的转换,并在所有操作完成后保存该上下文。

我不能为每个 Operation 使用单独的上下文,因为我的转换器生成关系(并且它们只能从相同的上下文访问)并且应用程序可能运行多达 20 次转换,所以它不是创建新上下文并在每次转换后保存它很酷。

所以我需要创建单独的 OperationQueue 并确保其中的所有操作都是从与上下文相同的线程执行的,我不知道该怎么做。

我只有一个想法:在 Operation.main() 中启动所有内容作为 context.perform { },但我真的不认为这是一个好的解决方案.

我找到了 similar thread at Stackoverflow ,但答案已过时,我发现接受的答案显然不正确。

最佳答案

使用您自己的操作队列不是最好的方法。对于 Core Data,您需要通过 mainQueueConcurrencyTypeprivateQueueConcurrencyType 使用内置的 Core Data 并发,然后使用 performperformAndWait。使用您描述的自定义操作队列将无法正常工作。

这将使用由 Core Data 管理的调度队列。您无法直接计算未决操作的数量,但您可以一次添加一堆 block ,最后一个 block 在导入过程完成时执行任何需要发生的事情。在导入过程中保存而不是仅在最后保存也是一个好主意,以防止内存使用失控,除非您只导入少量数据。

关于objective-c - 用于核心数据操作的 NSOperation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42097866/

相关文章:

objective-c - 比较两个数组忽略顺序

objective-c - NSTextView 的自定义对焦环

objective-c - 初始化NSURL对象时出现"Thread 1: stopped at breakpoint"错误

ios - Alamofire 参数 - NSDictionary 不可转换为 [String : AnyObject]

iphone - 如何获取Core Data数据库的最后一条记录?

ios - Spritekit 物理和相机平滑

ios - 为什么应用程序在将 pdf 页面转换为 ios 中的高质量图像时由于内存警告而终止,在真实设备中 swift

ios- ScrollView 中的所有页面未加载自定义uiview

ios - 核心数据推导表达式键路径使用运算符作为中间组件

objective-c - 核心数据 : Abstract Entity in Fetch Request