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

标签 ios core-data

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

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

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

例如在我的主要上下文中:

  • 插入了 2 倍的用户
  • 删除了 3 个墙贴
  • 更新了一些 friend 关系。

现在我如何让我的背景上下文知道这些变化?

在应用程序启动时立即创建后台上下文并让它在主线程上监听 NSManagedObjectContextObjectsDidChangeNotification 以不断保持同步是否有意义?

最佳答案

在 iOS5 中,您可以使用新的并发类型轻松地做到这一点。如果您使用 NSPrivateQueueConcurrencyType 创建上下文,则不会阻塞主线程。但是您必须访问传递给 managedObjectContext:performBlock 方法的 block 内的上下文。

关于iOS 在后台保存主线程 NSManagedObjectContext 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10774100/

相关文章:

ios - MapView 中无法识别的错误 (iOS)

ios - 分支 clicked_branch_link 为 0 没有元数据 Swift

iphone - YouTube Objective C GData API和ARC for iOS应用程序?

ios - 未收到来自 GCM CCS 的 delivery_receipt_notification

objective-c - NSFetchedResultsController 返回错误的 NSFetchedResultsChangeType

ios - 设计核心数据数据库

ios - 应用因持久存储创建崩溃而被拒绝

ios - 使用 Kiwi、Core Data 和 Magical Record 进行单元测试

ios - 在Swift中,如何从UITableView中获取对象id并根据对象id删除对象?

ios - Storyboard手势识别器