在CoreData保存之前确定哪些字段已更改

Mik*_*ike 13 core-data objective-c nsmanagedobjectcontext ios

//设置通知

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(dataChanged:)
 name:NSManagedObjectContextDidSaveNotification
 object:context];    
Run Code Online (Sandbox Code Playgroud)

//后来

- (void)dataChanged:(NSNotification *)notification{
  NSDictionary *info = notification.userInfo;
  NSSet *insertedObjects = [info objectForKey:NSInsertedObjectsKey];
  NSSet *deletedObjects = [info objectForKey:NSDeletedObjectsKey];
  NSSet *updatedObjects = [info objectForKey:NSUpdatedObjectsKey];
Run Code Online (Sandbox Code Playgroud)

无论如何要从updatedObjects确定哪些字段实际更改了?

谢谢,迈克尔

Mas*_*aro 18

以下应该可以解决这个问题,但是您需要使用NSManagedObjectContextWillSaveNotification并通过用于保存对象的相同NSManagedObjectContext访问更新的对象.

for(NSManagedObject *obj in updatedObjects){

   NSDictionary *changes = [obj changedValues];
   // now process the changes as you need

}
Run Code Online (Sandbox Code Playgroud)

请参阅评论中的讨论.

  • 这非常有帮助.谢谢.经过一些实验,我确定对于NSManagedObjectContextDidSaveNotification,changedValues将始终为空,因为值已经保存.这看起来对你好吗?我确定如果我使用NSManagedObjectContextWillSaveNotification,我可以使用[notification object]返回NSManagedObjectContext.从那里我可以调用[context updatedObjects],从更新的对象我可以调用[obj changedValues],如你所示.然后,如果保存继续,我可以看到哪些值即将更改. (4认同)