内核数据:复位到初始状态 [英] Core Data: Reset to the initial state

查看:101
本文介绍了内核数据:复位到初始状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个对象,我做一些更改,但我不想保存它们,我想要的'旧'值。

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆