【发布时间】:2011-06-18 17:12:10
【问题描述】:
我想向支持 coredata 的 iphone 应用程序添加撤消管理器。当用户尝试添加新对象(通过点击 + 按钮)时,我会加载一个新的模态视图控制器并在 viewDidLoad 中启动一个新的撤消组。
当用户按下取消按钮时,我想回滚取消操作回调中的更改。
查询:
- 是否可以启动一个嵌套的撤消组并通过事件循环将其持久化并将所有更改整理到一个撤消组中?现在,当我在 cancelAction 中调用 beginUndoGrouping 时,我得到一个缺少的 beginUndoGrouping 异常。
- groupsByEvent API 对 NSUndoManager 有什么意义?我是否需要将其设置为 NO 才能通过事件循环保留撤消组?
- 在 saveAction 回调中需要做什么才能使更改永久化(除了在 mangedObjectContext 上调用 save)?如何告诉撤消管理器停止跟踪更改?
错误信息:
* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“_endUndoGroupRemovingIfEmpty:: NSUndoManager 0x75415f0 处于无效状态,调用 endUndoGrouping 时没有匹配的开始
示例代码:
// RootViewController.m
- (void) addAction {
// Load Modal View Controller to add new object
}
// AddViewController.m
- (void) viewDidLoad {
// Start nested undo group
[self.managedObjectContext processPendingChanges];
[self.managedObjectContext.undoManager beginUndoGrouping];
[self createModel];
}
- (void) cancelAction {
// Revert all changes
[self.managedObjectContext processPendingChanges];
[self.managedObjectContext.undoManager endUndoGrouping];
[self.managedObjectContext.undoManager undoNestedGroup];
...
}
- (void) saveAction {
// Save changes
}
【问题讨论】:
标签: iphone core-data nsundomanager