CoreData 并通知后台工作人员有关主线程的更改

Posted

技术标签:

【中文标题】CoreData 并通知后台工作人员有关主线程的更改【英文标题】:CoreData and notifying background workers about change in main thread 【发布时间】:2012-12-27 08:20:24 【问题描述】:

我以为我的情况很简单,但是经过一整天的搜索,我不确定我是否有答案!!!

我正在使用 CoreData(实际上是使用 RestKit 和 [RKObjectManager sharedManager].objectStore)。我保存数据以仅存储在主线程上。虽然我有很多从数据库读取数据的后台线程。如果主线程(使用 main NSManagedObjectContext)将数据保存到数据库,我找不到任何通知这些后台线程的好方法。

我看到的唯一方法是保留所有后台线程的列表NSManagedObjectContexts,并在主线程上处理NSManagedObjectContextDidSaveNotification 时发送每个mergeChangesFromContextDidSaveNotification

这是处理这种情况的正常方式吗?我有一种感觉,这不是因为在多线程环境中管理这种缓存可能出现的潜在问题。

【问题讨论】:

为什么需要通知这些线程?你有多少线程?您使用什么类型的线程?是的,NSManagedObjectContextDidSaveNotification 是通知他们的正确方式。 【参考方案1】:

没有详细信息很难理解发生了什么,但是可以,在后台线程中使用NSManagedObjectContextDidSaveNotification

但是要小心,如果你创建了很多线程来监听变化,电池电量可能会很快下降。

根据我的经验,Core Data 中的线程应按如下方式使用:创建一个或多个线程,在共享持久存储协调器中执行某些请求。当线程完成时停止(删除)它们。这种机制允许您将数据加载到存储协调器的缓存中,从而加快主线程中执行的未来请求。

希望对您有所帮助。

附:我不知道 RestKit 如何与 Core Data 一起工作。

【讨论】:

以上是关于CoreData 并通知后台工作人员有关主线程的更改的主要内容,如果未能解决你的问题,请参考以下文章

coredata更新json后台线程问题

后台核心数据

如何通知主 MOC,后台 MOC 的变化

后台线程方法无法解决冻结问题

CoreData prepareForDeletion 调用无限次

在 CoreData 的后台线程中创建实体