iphone - CoreData 保存/还原未保存的更改

标签 iphone objective-c ios ipad core-data

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

问题是,和往常一样,有一个保存按钮和一个取消按钮。如果用户点击保存,NSManagedObjectContext 将被保存,并反射(reflect)更改。但是,如果用户点击取消,我需要将对象恢复到之前的状态。调用 [managedObjectContext rollback] 不适用于此目的。

有人知道如何正确实现吗?我无法在编辑期间将对象的属性存储为临时的单独 ivar,因为可以编辑多个对象,所有这些对象都具有不同的属性。

更新

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

  1. 如果您编辑并保存,更改会按预期更新。但是,如果您再次编辑并取消而不做任何更改,对象的状态将恢复为保存之前的状态。

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

还有:

这可能与我初始化用于填充 TableView 的 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;

最佳答案

关于iphone - CoreData 保存/还原未保存的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9493935/

相关文章:

ios - 从 Nib 加载多个自定义单元格

ios - UITextView 中希伯来字符的奇怪格式

iphone - 为什么我的 NSMutableArray "half dead"在 cellForRowAtIndexPath 中?

ios - Cocoapods 不会为谷歌分析创建框架目标

iphone - MKMapView 上的多个 MKOverlay 会导致内存警告

iphone - 如何将 NSData 转换为包含十六进制值的 char 数组

iphone - 如何在 iPhone 相机应用程序中使用各种效果或滤镜

iphone - 循环和中断动画

objective-c - 将 Swift block 转换为 Objective-C block

ios - 如何将 CGPDFDocument/CGPDFPage 附加到 MFMailComposeViewController