Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.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
Ios 确定CoreData保存前哪些字段已更改_Ios_Objective C_Core Data_Nsmanagedobjectcontext - Fatal编程技术网

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

Ios 确定CoreData保存前哪些字段已更改,ios,objective-c,core-data,nsmanagedobjectcontext,Ios,Objective C,Core Data,Nsmanagedobjectcontext,//设置通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataChanged:) name:NSManagedObjectContextDidSaveNotification object:context]; //后来 - (void)dataChanged:(NSNotification *)notification{ NSDictionary *info = no

//设置通知

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(dataChanged:)
 name:NSManagedObjectContextDidSaveNotification
 object:context];    
//后来

- (void)dataChanged:(NSNotification *)notification{
  NSDictionary *info = notification.userInfo;
  NSSet *insertedObjects = [info objectForKey:NSInsertedObjectsKey];
  NSSet *deletedObjects = [info objectForKey:NSDeletedObjectsKey];
  NSSet *updatedObjects = [info objectForKey:NSUpdatedObjectsKey];
是否仍然可以从UpdateObject中确定哪些字段实际发生了更改

谢谢,
Michael

以下操作应该可以完成,但您需要使用NSManagedObjectContextWillSaveNotification,并通过用于保存对象的相同NSManagedObjectContext访问更新的对象

for(NSManagedObject *obj in updatedObjects){

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

}

请参见评论中的讨论。

这非常有帮助。非常感谢。经过一些实验,我确定NSManagedObjectContextDidSaveNotification的ChangedValue将始终为空,因为这些值已经保存。你觉得这样对吗?我确定如果使用NSManagedObjectContextWillSaveNotification,我可以使用返回NSManagedObjectContext的[notification object]。从那里我可以调用[context updatedObjects],从更新后的对象我可以调用[obj changedValues],正如您所指出的那样。然后,如果继续保存,我可以看到哪些值将要更改。是:您需要访问原始的NSManagedObjectContext,在那里进行更改才能正常工作。@MassimoCafaro我从“changedValues”方法中获得空字典。我有一个实体“Guest”,它与另一个实体“PersonalDetails”有一对一的关系。如果我在PersonalDetails中更改了任何内容,我会在updatedObjects中获得“Guest”和“PersonalDetails”,但ChangedValue返回空字典。@正如在注释中所讨论的,您需要使用与修改对象相同的NSManagedObjectContext,并且NSManagedObjectContextWillSaveNotification。事实上,如果使用NSManagedObjectContextDidSaveNotification并保存对象,则在保存对象后会丢失对对象所做的修改。