【发布时间】:2011-06-19 15:46:14
【问题描述】:
我想在后台线程中执行一个相当复杂的下载过程。此过程中的步骤之间存在一些自然的依赖关系。比如我需要先完成表A和表B的下载,然后再设置它们之间的关系(我用的是Core Data)。
我首先想到将每个依赖步骤放在它自己的 NSOperation 中,然后在两个操作之间创建依赖关系(即在一个操作中下载两个表,然后在下一个依赖操作中设置它们之间的关系)。但是,每个 NSOperation 都需要它自己的 NSManagedContext,所以这不好。在下载两个表并设置它们的关系之前,我不想保存背景上下文。
因此,我得出结论,这一切都应该发生在一个 NSOperation 中,并且我应该在满足运行它的所有条件时使用通知或其他一些机制来调用依赖方法。
不过,我是一名 iOS 初学者,所以在我冒险走这条路之前,我不介意我是否得出了正确的结论。
【问题讨论】:
-
为什么不能使用多个上下文?您可以简单地忽略来自其他两个上下文的保存通知,并在您关心的那个之后刷新。
-
因为在设置关系之前尝试保存表 A 或表 B 将导致验证失败 - 即关系不是可选的。但是,您提出了一个有趣的观点。如果我能够在不通知主线程的 MOC 并触发合并的情况下将数据保存在后台线程 MOC 中,那么 MOC 是否仍有可能在后续提取中获取保存的数据?我从来都不是很清楚,听起来你可能知道!
-
后续提取将获取更改,但仅当您以前从未访问过任何这些对象(即它们都是新的)时才建议这样做,对于现有对象,最好使用 -refreshObject: MOC 上的 mergeChanges 或 -reset。
-
啊,有道理。感谢您的澄清。
标签: core-data nsoperation