gpt4 book ai didi

iphone - 核心数据: Reset to the initial state

转载 作者:行者123 更新时间:2023-12-03 18:26:37 25 4
gpt4 key购买 nike

我有一个对象,我对其进行了一些更改,但我不想保存它们,我想要“旧”值。

我尝试过:

[managedObjectContext rollback];
[managedObjectContext redo];
[managedObjectContext reset];

它们似乎都不起作用......

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

我应该再次重新获取对象吗?

谢谢

r。

最佳答案

将您的更改包装在 NSUndoManager beginUndoGrouping 中,然后将 NSUndoManager endUndoGrouping 包装在 NSUndoManager undo 中。

这是回滚更改的正确方法。 NSManagedObjectContext 有自己可以访问的内部 NSUndoManager

更新显示示例

由于 NSUndoManager 在 Cocoa Touch 上默认为 nil,因此您必须创建一个并首先将其设置到 NSManagedObjectContext

//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 访问器,那么就没有问题。

关于iphone - 核心数据: Reset to the initial state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2214343/

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