保存后NSManagedObject更改了属性

JPC*_*JPC 8 core-data objective-c nsmanagedobject nsmanagedobjectcontext

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

Mar*_*rra 8

NSManagedObjectContextDidSaveNotification确实包含了与服务器同步所需的所有三位信息.检查[notification userInfo],你会发现里面三组:NSInsertedObjectsKey,NSUpdatedObjectsKey,和NSDeletedObjectsKey

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

更新#2

进一步探讨:

NSManagedObjectContextWillSaveNotification你可以循环遍历每一组并引用该changedValues方法.您可以在收到该词典之前保留对该词典的引用NSManagedObjectContextDidSaveNotification,然后处理更改.对我来说听起来仍然很沉重.

更新

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

如果您正在尝试确定要推送到服务器的内容,那么处于属性级别的内容太低.您应该在实体级别进行同步.

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


Dav*_*eyl 1

为什么不在他们快要得救的时候去抓住他们呢?订阅NSManagedObjectContextWillSaveNotificationinsertedObjectsupdatedObjects检查deletedObjects.NSManagedObjectContext

更新:

更简单的是,获取用户信息NSManagedObjectContextDidSaveNotification

从文档中:

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

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