0

我有一个NSFetchedResultsController(FRC)支持表视图。根据定义,它正在侦听与其定义的获取请求相关的托管对象上下文 (MOC) 中的更改。

虽然这个表视图是可见的,但我可能运行了一个小的导入(比如大约十几个记录),其中包含与观看 FRC 相关的托管对象。

我在对等 MOC 上运行导入到支持表视图的 MOC。两个 MOC 都是NSMainQueueConcurrencyType,有一个共同的父 MOC NSPrivateQueueConcurrencyType

一旦导入完成并保存,我之前的设置通知就会触发一个处理程序,它只是执行一个mergeChangesFromContextDidSaveNotification:

- (void)scratchpadContextDidSave:(NSNotification *)saveNotification {
    log4Info(@"Default Context now merging changes from Scratchpad Context save notification.");
    [self.defaultContext mergeChangesFromContextDidSaveNotification:saveNotification];
}

问题: 如何mergeChangesFromContextDidSaveNotification:在任何收听的 FRC 收到通知之前完成?

动机 FRC 的新数据在我的应用程序中充当某种触发器,这很好,只要所有合并的更改都可用。我的 FRC 立即行动,没有完整的信息。

我将删除需要 FRC 以这种方式保持耐心的逻辑,但它让我担心我不知道有一种方法可以在整个合并操作完成之前“锁定”更改通知发出。

4

1 回答 1

0

id星,

强制同步到所有-save:s 的一种方法是让它们通过私有串行队列序列化它们的合并,其中最后一项实际执行与主 MOC 的合并。仅仅因为一个项目被保存到持久存储中,并不意味着它必须立即合并。userInfo在将字典提交到主 MOC 之前,您必须自己合并字典。

安德鲁

于 2012-06-07T13:08:38.207 回答