是否为瞬态属性更新调用NSManagedObjectContextDidSaveNotification?

时间:2011-09-09 09:44:51

标签: core-data nsmanagedobject nsmanagedobjectcontext

我似乎无法得到一个明确的答案:当您更改瞬态属性,然后调用save时,是否应该触发NSManagedObjectContextDidSaveNotification?在我的通知监听器中,如何过滤掉这些来自瞬态属性变化的通知?

这是我正在尝试做的事情:我想在主线程中加载一个联系人列表,当它完成后,我想从地址簿中读取后台线程中的图像并将它们附加到联系人。这在它的表面上运行正常:从Contacts实体加载后,我使用调度队列遍历所有联系人,在地址簿中找到他们的图像,并将它们保存在Contact的“contactImage”属性中(这是瞬态的) 。然后,调度队列成功重新加载tableview(在主线程上),并且图像显示在联系人旁边。 问题是,如果我对甚至一个托管对象上调用“保存”的联系人做任何事情(例如我删除其中一个联系人),则为所有联系人调用NSManagedObjectContextDidSaveNotification。我发现这是因为在查看“self.contactImage = img;”之前更改了contactImage属性。线让问题消失了。这对我来说是令人惊讶的,因为我原以为只会为非瞬态属性调用保存通知。

任何人都可以确认这是否是预期的行为?或者我做错了什么?如果是预期的,如何在NSManagedObjectContextDidSaveNotification侦听器中过滤掉瞬态属性的更新?我需要在监听器中进行一些后处理,并且我不想不必要地进行瞬态属性更新。我已经检查了NSManagedObject上的changedValues字典,但它似乎在监听器内部显示为空(因为我只是改变了瞬态属性)。

感谢。

1 个答案:

答案 0 :(得分:0)

昨天,

瞬态属性有一个关键特征 - 它们是受管理的。您可以轻松地将未管理的ivars添加到任何NSManagedObject。如果您这样做,则不受-save:notifications。

的约束

一个相关的问题:你为什么要使用瞬态ivar?他们有一些专门的用途;主要是,它们用于触发整个模型的属性更新;即你所看到的行为。

第二个相关问题:为什么你在后台获取所有图像而不是从地址簿中加载它们?这看起来像是一个过早优化的案例。

安德鲁