在保存发生后,是否可以找出托管对象上保存的属性?例如,我有人在监听托管对象上下文保存(NSManagedObjectContextDidSaveNotification),我想知道对象的哪些属性已保存。
答案 0 :(得分:8)
NSManagedObjectContextDidSaveNotification
确实包含与服务器同步所需的所有三位信息。查看[notification userInfo]
,您会在其中找到三个集:NSInsertedObjectsKey
,NSUpdatedObjectsKey
和NSDeletedObjectsKey
如果您想知道实体上的哪些属性已更改,则需要您使用KVO自行跟踪它们。我建议不要这样做,因为只需将整个对象推到服务器上,这种努力程度的可能性就很小。
进一步探讨:
从NSManagedObjectContextWillSaveNotification
开始,您可以遍历每个集合并引用changedValues
方法。在收到NSManagedObjectContextDidSaveNotification
之后,您可以保留对该字典的引用,然后处理更改。对我来说听起来仍然很沉重。
你的最终目标是什么?!?!
如果您试图找出要推送到服务器的内容,那么处于属性级别的内容太低了。您应该在实体级别进行同步。
如果您只是想在应用程序内部保持一些内部一致性,那么您正在思考方式,太低级别。这是一个已解决的问题。核心数据解决了它。
答案 1 :(得分:1)
为什么不在他们即将得救的时候得到他们。订阅NSManagedObjectContextWillSaveNotification并检查insertedObjects
的{{1}},updatedObjects
和deletedObjects
。
更新:
更简单,获取NSManagedObjectContext
来自文档:
通常,在线程A上注册托管对象上下文 保存通知,NSManagedObjectContextDidSaveNotification。当你 收到通知,其用户信息字典包含数组 使用已插入,删除和更新的托管对象 线程B。
答案 2 :(得分:1)
这是我解决的解决方案。我有一个单例类,在上下文保存时会得到通知。 NSManagedObjectContextWillSave通知告诉我哪些内容已更改,因此我将它们存储在字典中,其中键是保存的上下文。然后,当我收到NSManagedObjectContextDidSave通知时,我检查字典中的相关上下文。最后,我从字典中删除该条目。这看起来合情合理吗?