保存后NSManagedObject更改了属性

时间:2011-11-18 00:23:42

标签: objective-c core-data nsmanagedobject nsmanagedobjectcontext

在保存发生后,是否可以找出托管对象上保存的属性?例如,我有人在监听托管对象上下文保存(NSManagedObjectContextDidSaveNotification),我想知道对象的哪些属性已保存。

3 个答案:

答案 0 :(得分:8)

NSManagedObjectContextDidSaveNotification确实包含与服务器同步所需的所有三位信息。查看[notification userInfo],您会在其中找到三个集:NSInsertedObjectsKeyNSUpdatedObjectsKeyNSDeletedObjectsKey

如果您想知道实体上的哪些属性已更改,则需要您使用KVO自行跟踪它们。我建议不要这样做,因为只需将整个对象推到服务器上,这种努力程度的可能性就很小。

更新#2

进一步探讨:

NSManagedObjectContextWillSaveNotification开始,您可以遍历每个集合并引用changedValues方法。在收到NSManagedObjectContextDidSaveNotification之后,您可以保留对该字典的引用,然后处理更改。对我来说听起来仍然很沉重。

更新

你的最终目标是什么?!?!

如果您试图找出要推送到服务器的内容,那么处于属性级别的内容太低了。您应该在实体级别进行同步。

如果您只是想在应用程序内部保持一些内部一致性,那么您正在思考方式,太低级别。这是一个已解决的问题。核心数据解决了它。

答案 1 :(得分:1)

为什么不在他们即将得救的时候得到他们。订阅NSManagedObjectContextWillSaveNotification并检查insertedObjects的{​​{1}},updatedObjectsdeletedObjects

更新:

更简单,获取NSManagedObjectContext

的用户信息

来自文档:

  

通常,在线程A上注册托管对象上下文   保存通知,NSManagedObjectContextDidSaveNotification。当你   收到通知,其用户信息字典包含数组   使用已插入,删除和更新的托管对象   线程B。

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/coredata/Articles/cdConcurrency.html#//apple_ref/doc/uid/TP40003385-SW1

答案 2 :(得分:1)

这是我解决的解决方案。我有一个单例类,在上下文保存时会得到通知。 NSManagedObjectContextWillSave通知告诉我哪些内容已更改,因此我将它们存储在字典中,其中键是保存的上下文。然后,当我收到NSManagedObjectContextDidSave通知时,我检查字典中的相关上下文。最后,我从字典中删除该条目。这看起来合情合理吗?