iOS NSManagedObjectContext - 保存所有更改后是不是可以获取或发送通知?

Posted

技术标签:

【中文标题】iOS NSManagedObjectContext - 保存所有更改后是不是可以获取或发送通知?【英文标题】:iOS NSManagedObjectContext - is it possible to get or send a notification when all changes is saved?iOS NSManagedObjectContext - 保存所有更改后是否可以获取或发送通知? 【发布时间】:2013-05-08 14:09:29 【问题描述】:

我使用 Core Data - 我已经注册并正在监听 NSManagedObjectContextDidSaveNotification:s 我有一个数据集合(来自 JSON),我想保存,在保存所有对象之后,我想得到某种通知。当前似乎在保存每个对象后发送此通知。是否有某种内置解决方案可以获取我想要的通知?如果没有,我怎么能/应该这样做?

【问题讨论】:

确定 MOC 的保存时间由您控制? 是的,我愿意。但我不知道何时保存所有对象。我进行异步保存,有时保存过程需要一些时间。 如果您要保存多次,则需要计算保存次数和保存完成次数并自行管理。 【参考方案1】:

在您保存特定批次的对象后,不会发布内置通知。 Core Data 真的不知道你的集合中有多少对象,所以它无法知道你已经到了它的尽头。

每次在托管对象上下文上调用 save: 时,您都会得到 NSManagedObjectContextDidSaveNotification。您可以等到处理完所有对象后再保存,这意味着只有一个 NSManagedObjectContextDidSaveNotification

更好的解决方案是在您知道已完成收藏后发布您自己的通知。定义一个名为 JSONUpdatesCompleteNotification 之类的字符串常量,并在您上次调用 save: 之后发布一个具有该名称的通知。

NSString *JSONUpdatesCompleteNotification = @"JSONUpdatesCompleteNotification";

然后,当你知道你已经完成时,

[[NSNotificationCenter defaultCenter] postNotificationName:JSONUpdatesCompleteNotification object:self];

确保您在需要了解的任何地方都观察到此通知,然后您就完成了。

【讨论】:

以上是关于iOS NSManagedObjectContext - 保存所有更改后是不是可以获取或发送通知?的主要内容,如果未能解决你的问题,请参考以下文章

在 macOS 中初始化 CoreData

如何在核心数据中以一对多关系链接现有值?

{python之IO多路复用} IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO

IO模型--阻塞IO,非阻塞IO,IO多路复用,异步IO

IO复用阻塞IO非阻塞IO同步IO异步IO

四种IO模型‘阻塞IO/非阻塞IO/信号驱动IO/异步IO‘