iOS保存主线程NSManagedObjectContext在后台更改

时间:2012-05-27 12:50:36

标签: ios core-data

我试图弄清楚现在我的所有核心数据都是在主线程上管理的,只有一个上下文。我使用了仪器并注意到保存操作在很长一段时间内阻塞了主线程。我想使用GCD在后台线程上运行我的保存操作

现在我了解如何通过创建新线程/上下文来设置此过程并侦听“保存”通知以在主线程上合并。

但是当我创建一个新的上下文时,主线程的上下文中的所有更改都需要插入/合并到new中,否则它将无法保存?我似乎可以找到任何这方面的例子。

例如在我的主要背景上:

  • 插入2x用户
  • 删除了3个wallposts
  • 更新了一些朋友关系。

现在,如果这些更改,我如何知道我的背景知识?

在应用程序启动时正确创建背景上下文并让它在主线程上监听NSManagedObjectContextObjectsDidChangeNotification以使其始终保持同步是否有意义?

2 个答案:

答案 0 :(得分:1)

在iOS5中,您可以使用新的并发类型轻松完成此操作。如果使用NSPrivateQueueConcurrencyType创建上下文,则不会阻止主线程。但是您必须访问传递给managedObjectContext的块内的上下文:performBlock方法。

答案 1 :(得分:0)

您无法在线程之间传递NSManagedObject实例。如果您正在努力处理大型数据集,可能需要阅读Marcus Zarra撰写的this post