CoreData保存/恢复未保存的更改

Gre*_*reg 5 iphone core-data objective-c ipad ios

我有一个UITableView由a管理的对象列表NSFetchedResultsController.当用户选择对象时,将显示编辑视图,允许用户编辑所选NSManagedObject实例.当用户进行更改时,对象的属性将在对象中更新.

问题是,像往常一样,有一个Save按钮和一个Cancel按钮.如果用户点击保存,NSManagedObjectContext则保存,并反映更改.但是,如果用户点击取消,我需要该对象恢复到之前的状态.呼叫[managedObjectContext rollback]不能用于此目的.

有谁知道如何正确实现这个?我无法在编辑过程中将对象的属性存储为临时单独的ivars,因为有多个对象可以编辑,所有对象都具有不同的属性.

更新

我目前正在做的是存储NSManagedObject一个实例变量,并调用save:保存和rollback取消.使用object.property = something或修改实例变量[object setValue:something forKey:@"property"].这并没有如预期,而不是产生这种行为的工作:

  1. 如果编辑并保存,更改将按预期更新.但是,如果再次编辑并取消而不进行更改,则对象的状态将恢复为保存之前的状态.

  2. 如果您编辑和取消,更改仍会更新,就像保存一样.再次编辑和取消(不进行更改)将使其恢复到之前的状态.

也:

这可能与我初始化NSFetchedResultsController用于填充表视图的方式有关吗?码:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSString *entityName = self.entityName;
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:self.context];
[fetchRequest setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];

[fetchRequest setIncludesPendingChanges:NO];

NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_context sectionNameKeyPath:nil cacheName:@"Root"];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
Run Code Online (Sandbox Code Playgroud)

Gre*_*reg 2

放弃了执行CoreData此操作的所有机制(它们都不起作用)后,我最终将对象的所有属性存储为编辑视图控制器中的单独变量,并在取消时回滚到它们。