gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 04:22:57 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com