使用多个托管对象上下文问题

时间:2011-07-13 09:00:01

标签: iphone objective-c core-data merge nsmanagedobjectcontext

我目前通过多个并行执行的线程执行多个网络请求,因此每个线程都有一个托管对象上下文,每个线程都为Core Data实体设置属性值。所以这就是困境,每个网络请求一次获取少量数据,并且有数百个(甚至数千个)这些请求,我希望在所有网络操作发生后执行保存(这样我就可以安全地假设保存数据意味着所有内容都已成功下载并写入商店。所以有两个问题:

  1. 在每个线程完成写入上下文后,是否保存每个托管对象上下文,还是将所有托管对象上下文存储在内存中,并在结束周期中通过所有线程并执行保存? (写完这篇文章之后,很明显,随时随地保存将是更有效的方法,但我仍然希望听到你的想法。)
  2. 有没有办法合并托管对象上下文而不执行保存操作?我目前正在通过NSManagedObjectContextDidSaveNotification通知合并上下文,并想知道是否还有其他方法。

2 个答案:

答案 0 :(得分:2)

我看不出你怎么能“将所有托管对象上下文存储在内存中,并在最后循环中通过所有托管对象上下文并执行保存”。每个MOC应该被限制在创建它的线程中,因此我不知道如何在不破坏这个限制规则的情况下有效地循环所有MOC ......但是你可能已经意识到已经... ...

我还认为通过NSManagedObjectContextDidSaveNotification合并MOC是最有效的方法。我甚至认为在每个对象插入后保存MOC最简单(例如,当您导入数据时)。这样你就可以最小化每次合并的范围!由于合并是在内存中执行的,因此它们的开销很小。

答案 1 :(得分:0)

您可以为所有线程创建控制器类,并仅使用一个托管上下文来保存数据。

线程完成下载后,调用ThreadControlerClass中的委托将数据与旧数据合并,然后在所有线程完成下载时保存。 如果您的数据太大,您可以进行一些中间保存。