Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data NSManagedObjectContextDidSaveNotification是否被调用以进行临时属性更新?_Core Data_Nsmanagedobject_Nsmanagedobjectcontext - Fatal编程技术网

Core data NSManagedObjectContextDidSaveNotification是否被调用以进行临时属性更新?

Core data NSManagedObjectContextDidSaveNotification是否被调用以进行临时属性更新?,core-data,nsmanagedobject,nsmanagedobjectcontext,Core Data,Nsmanagedobject,Nsmanagedobjectcontext,我似乎无法得到一个明确的答案:当您更改一个临时属性,然后调用save时,是否应该触发NSManagedObjectContextDidSaveNotification?在我的通知侦听器中,如何过滤掉这些来自瞬态属性更改的通知 下面是我要做的:我想在主线程中加载联系人列表,完成后,我想从地址簿中读取背景线程中的图像,并将它们附加到联系人。从表面上看,这很有效:从Contacts实体加载后,我使用调度队列循环遍历所有联系人,在地址簿中找到他们的映像,并将其保存在Contact的contactImag

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

下面是我要做的:我想在主线程中加载联系人列表,完成后,我想从地址簿中读取背景线程中的图像,并将它们附加到联系人。从表面上看,这很有效:从Contacts实体加载后,我使用调度队列循环遍历所有联系人,在地址簿中找到他们的映像,并将其保存在Contact的contactImage属性中,该属性是暂时的。然后,调度队列成功地在主线程上重新加载tableview,并且图像显示在联系人旁边。 问题是,如果我对某个联系人执行任何操作,甚至对某个受管对象调用保存,例如删除某个联系人,则会对所有联系人调用NSManagedObjectContextDidSaveNotification。我发现这是因为contactImage属性在。。。说明self.contactImage=img;线使问题消失。这让我感到惊讶,因为我原以为save通知只会针对非瞬态属性调用

有人能确认这是否是预期的行为吗?还是我做错了什么?如果需要,如何过滤NSManagedObjectContextDidSaveNotification侦听器中临时属性的更新?我需要在监听器中进行一些后处理,我不想对瞬态属性更新进行不必要的后处理。我已经检查了NSManagedObject上的changedValues字典,但它似乎在侦听器中显示为空,因为我猜只有瞬态属性发生了更改

谢谢。

昨天

瞬态属性有一个关键特征——它们是可管理的。您可以轻松地将未管理的IVAR添加到任何NSManagedObject。如果您这样做,他们将不会收到-save:通知

一个相关的问题:为什么要使用瞬时ivar?它们有一些特殊用途;它们主要用于在整个模型中触发属性更新;i、 你所看到的行为

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

安德鲁昨天

瞬态属性有一个关键特征——它们是可管理的。您可以轻松地将未管理的IVAR添加到任何NSManagedObject。如果您这样做,他们将不会收到-save:通知

一个相关的问题:为什么要使用瞬时ivar?它们有一些特殊用途;它们主要用于在整个模型中触发属性更新;i、 你所看到的行为

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


安德鲁:这是有道理的。我之所以使用瞬时ivar,是因为我没有想到我可以将ivar添加到NSManagedObject,我认为它应该有助于获得一些核心数据低内存管理场景。那么,请确认一下:DidSaveNotification侦听器中是否有方法检测更改是否来自瞬态属性?图像背景提取:按姓名匹配时查找通讯簿条目的代码,尤其不是很快,因此,如果不预取图像,您可能会注意到tableview滚动中的波动。接下来:您是否知道是否可以在NSManagedObjectContextDidSaveNotification侦听器中检测到更改是否来自临时属性?Z s,我没有在DidSaveNotification中对每个属性进行任何检查。这就是说,在任何属性上设置自己的观察者是捕获属性前后状态的方法。我相信您可以观察NSManagedObject上的任何@属性。这是有道理的。我之所以使用瞬时ivar,是因为我没有想到我可以将ivar添加到NSManagedObject,我认为它应该有助于获得一些核心数据低内存管理场景。那么,请确认一下:DidSaveNotification侦听器中是否有方法检测更改是否来自瞬态属性?图像背景提取:按姓名匹配时查找通讯簿条目的代码,尤其不是很快,因此,如果不预取图像,您可能会注意到tableview滚动中的波动。后续:您知道是否可以在NSManagedObjectContextDidSaveNotification侦听器中检测到更改是否来自临时pro
perty?Z S,我没有在DIDSave通知中对每个属性进行任何检查。这就是说,在任何属性上设置自己的观察者是捕获属性前后状态的方法。我相信您可以观察NSManagedObject上的任何@属性。安得烈