使多个上下文中的 NSManagedObjects 保持同步
Posted
技术标签:
【中文标题】使多个上下文中的 NSManagedObjects 保持同步【英文标题】:Keeping NSManagedObjects in multiple contexts synchronized 【发布时间】:2014-08-09 09:57:18 【问题描述】:我需要针对以下情况的建议。我的应用程序中有两个托管对象上下文。根据线程,它们通过相同的属性访问,即
self.managedObjectContext
如果任何上下文更改或保存数据,我想使用
在两个上下文上保持数据同步-refreshObject:mergeChanges:
并传递 mergeChanges = YES,并且该应用程序还在侦听通知 NSManagedObjectContextDidSaveNotification
。但我不知道哪个上下文保存了数据。 (或者我可以吗?如果可以,有人可以告诉我吗?)
我的问题是,在收到此通知后,我应该在两种情况下都执行 -refreshObject:mergeChanges:
吗?例如
[bgContext refreshObject:self mergeChanges:YES];
[fgContext refreshObject:self mergeChanges:YES];
或
[self.managedObjectContext refreshObject:self mergeChanges:YES];
或者我应该遵循什么方法?
【问题讨论】:
【参考方案1】:在您对NSNotificationCenter -addObserver:selector:name:object:
的调用中,提供适当的MOC 作为:object
参数。现在您只会收到来自该 MOC 的更改通知。如果您使用基于块的addObserver:...
调用,object:
参数的工作方式相同。
您也可以只使用通知,而无需为每个上下文注册不同的选择器/块。当通知到达时,您可以检查其object
属性并使用它来确定需要更新的上下文。
【讨论】:
好的,我试试看。谢谢以上是关于使多个上下文中的 NSManagedObjects 保持同步的主要内容,如果未能解决你的问题,请参考以下文章
核心数据 - 在多个线程之间共享 NSManagedObjects
防止更新UITableViewCell的NSManagedObject引用
在另一个线程中使用来自 NSArrayController 的 NSManagedObjects
如何在 XCode 调试器中调试 NSManagedObjects?
核心数据:在多线程 iOS 应用程序中实现多个 NSManagedObjects 和 NSFetchedResultsController 非常困惑