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"].这并没有如预期,而不是产生这种行为的工作:
如果编辑并保存,更改将按预期更新.但是,如果再次编辑并取消而不进行更改,则对象的状态将恢复为保存之前的状态.
如果您编辑和取消,更改仍会更新,就像保存一样.再次编辑和取消(不进行更改)将使其恢复到之前的状态.
这可能与我初始化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)