内核数据:复位到初始状态 [英] Core Data: Reset to the initial state
问题描述
我有一个对象,我做一些更改,但我不想保存它们,我想要的'旧'值。
I have an object, I make some changes to it, but I don't want to save them, I want the 'old' values.
ve尝试:
[managedObjectContext rollback];
[managedObjectContext redo];
[managedObjectContext reset];
并且没有一个似乎工作...
and none of them seems to work ...
NSLog(@"current: %@",ingredient.name); // ===> bread
[ingredient setName:@"test new data"];
NSLog(@"new: %@",ingredient.name); // ===> test new data
[managedObjectContext rollback];
[managedObjectContext redo];
[managedObjectContext reset];
NSLog(@"current: %@",ingredient.name); // ===> test new data
// I want again ===> bread
是否应该重新提取对象?
Should I refetch the object again ?
谢谢,
r。
推荐答案
NSUndoManager beginUndoGrouping
,然后是 NSUndoManager endUndoGrouping
,后跟 NSUndoManager撤消
。
这是回滚更改的正确方法。 NSManagedObjectContext
有自己的内部 NSUndoManager
,您可以访问。
That is the correct way to roll back changes. The NSManagedObjectContext
has its own internal NSUndoManager
that you can access.
由于Cocoa Touch默认情况下 NSUndoManager
为nil,因此您必须创建一个并将其设置为 NSManagedObjectContext第一
。
Because the NSUndoManager
is nil by default on Cocoa Touch, you have to create one and set it into the NSManagedObjectContext first
.
//Do this once per MOC
NSManagedObjectContext *moc = [self managedObjectContext];
NSUndoManager *undoManager = [[NSUndoManager alloc] init];
[moc setUndoManager:undoManager];
[undoManager release], undoManager = nil;
//Example of a grouped undo
undoManager = [moc undoManager];
NSManagedObject *test = [NSEntityDescription insertNewObjectForEntityForName:@"Parent" inManagedObjectContext:moc];
[undoManager beginUndoGrouping];
[test setValue:@"Test" forKey:@"name"];
NSLog(@"%s Name after set: %@", __PRETTY_FUNCTION__, [test valueForKey:@"name"]);
[undoManager endUndoGrouping];
[undoManager undo];
NSLog(@"%s Name after undo: %@", __PRETTY_FUNCTION__, [test valueForKey:@"name"]);
还要确保您的访问器遵循KVO的规则并发布 willChange:
, -didChange:
, -willAccess:
和 -DidAccess:
通知。如果你只是使用 @dynamic
访问器,那么你会很好。
Also make sure that your accessors are following the rules of KVO and posting -willChange:
, -didChange:
, -willAccess:
and -DidAccess:
notifications. If you are just using @dynamic
accessors then you will be fine.
这篇关于内核数据:复位到初始状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!