gpt4 book ai didi

iphone - 使用核心数据撤消管理

转载 作者:太空狗 更新时间:2023-10-30 03:21:37 25 4
gpt4 key购买 nike

我尝试在 iPhone 上使用 Core Data 实现撤消支持,但遇到了一些问题。

我目前设置了几个托管对象,但是当我更改它们的属性时,撤消管理器不会记录这些更改。根据我的理解,Core Data 应该会自动设置此功能,我应该能够对托管对象的更改、创建和删除提供基本的撤消和重做支持。

是否有特殊的方法来更改对象,以便撤消管理器记录它们?或者我应该为每次更改注册撤消操作吗?

此外,假设应用程序滑入详细 View 以编辑特定对象。我希望能够撤消在点击取消按钮时所做的所有更改。撤消分组是否适用于此?提交一组并让另一个撤消管理器在详细 View 中管理更精细的操作与仅使用一个撤消管理器(包含在托管对象上下文中的那个)有什么区别?

谢谢!

最佳答案

虽然撤消功能几乎开箱即用,但您确实需要为需要撤消支持的 NSManagedObjectContext 分配一个 NSUndoManager。

最简单的方法是在某些东西向您的 appDelegate 请求 NSManagedObjectContext 时设置撤消支持

这是苹果给你的默认方法:

- (NSManagedObjectContext *) managedObjectContext {

if (managedObjectContext != nil) {
return managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];

[managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return managedObjectContext;
}

修改成这样:

- (NSManagedObjectContext *) managedObjectContext {

if (managedObjectContext != nil) {
return managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];

//Undo Support
NSUndoManager *anUndoManager = [[NSUndoManager alloc] init];
[managedObjectContext setUndoManager:anUndoManager];
[anUndoManager release];

[managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return managedObjectContext;
}

关于iphone - 使用核心数据撤消管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1245785/

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