mon*_*eta 12 iphone core-data iphone-sdk-3.0
我有一个对象,我对它进行了一些更改,但我不想保存它们,我想要'旧'值.
我尝试过:
[managedObjectContext rollback];
[managedObjectContext redo];
[managedObjectContext reset];
Run Code Online (Sandbox Code Playgroud)
并且它们似乎都没有工作......
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
Run Code Online (Sandbox Code Playgroud)
我应该再次重新获取对象吗?
谢谢,
河
Mar*_*rra 24
将您的更改换入a NSUndoManager beginUndoGrouping然后a,NSUndoManager endUndoGrouping然后按a NSUndoManager undo.
这是回滚更改的正确方法.它NSManagedObjectContext有自己的内部NSUndoManager,你可以访问.
因为NSUndoManager在Cocoa Touch上默认为nil,所以你必须创建一个并将其设置为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"]);
Run Code Online (Sandbox Code Playgroud)
另外,还要确保你的存取跟随志愿和公布的规则-willChange:,-didChange:,-willAccess:和-DidAccess:通知.如果你只是使用@dynamic访问器,那么你会没事的.
| 归档时间: |
|
| 查看次数: |
8315 次 |
| 最近记录: |