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并保存对象,则在保存对象后会丢失对对象所做的修改。