Cocoa编程中的撤销重做与异常处理
1. 撤销与重做机制
在Cocoa中, NSUndoManager 负责处理撤销和重做操作。在一些应用(如ColorMix)中,所执行的操作(如更改颜色)都可以通过编辑菜单中的选项进行撤销和重做,并且这些操作是特定于文档的,一个文档中的更改和撤销操作与其他文档相互独立。
在Core Data应用中,基本的撤销和重做功能通常会自动处理,无需额外编写代码。管理对象上下文能够检测到对象的编辑操作,并将反向操作添加到“撤销栈”中。这意味着对于大多数现代Cocoa应用,撤销和重做功能是免费提供的。
1.1 撤销栈的工作原理
撤销和重做的基本实现原理是:每次在应用中编辑内容时,需要创建一个代表反向编辑操作的项。例如,用户在文本末尾添加字母“X”,代码需要创建一个可以删除该“X”的操作表示,并将其放置在“撤销栈”中。当执行“撤销”命令时,会从撤销栈顶部弹出最近的项,并执行其描述的操作。同时,执行“撤销”命令会创建另一个项,即撤销栈中反向项的反向操作(实际上与原始编辑操作相同),并将其放置在“重做栈”中,以便用户后续可以撤销撤销操作。
Cocoa实现撤销操作的特殊之处在于,每个撤销项是通过目标对象、要调用的方法选择器以及所需的参数隐式构建的。当触发“撤销”命令时,无需进行任何解码或查找操作,直接调用方法即可。
1.2 示例代码
以下是一个简单的示例,展示如何使设置名称的操作可撤销:
- (void)setName:(NSString *)newName {
超级会员免费看
订阅专栏 解锁全文
8

被折叠的 条评论
为什么被折叠?



