Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSNDOManager:禁用破坏性操作的“重做”_Objective C_Cocoa_Nsundomanager - Fatal编程技术网

Objective c NSNDOManager:禁用破坏性操作的“重做”

Objective c NSNDOManager:禁用破坏性操作的“重做”,objective-c,cocoa,nsundomanager,Objective C,Cocoa,Nsundomanager,我想在我的Mac应用程序中添加撤消/重做功能。该应用程序可以处理便笺,我想在用户删除便笺时添加一个撤消操作 这很好,用户删除注释后,“撤消删除注释”菜单变为活动状态,但在使用“撤消删除注释”命令后,有一个“重做删除注释”菜单变为活动状态 当前,当我单击“重做删除注释”时没有发生任何事情,因为我没有注册操作。我不希望用户能够通过撤销/重做堆栈意外删除注释 是否可以添加撤消操作而不添加重做操作 不在常见情况下。这样做将违反平台标准撤销/重做机制的隐含契约。你希望你注册的东西是对称的。如果用户删除注释

我想在我的Mac应用程序中添加撤消/重做功能。该应用程序可以处理便笺,我想在用户删除便笺时添加一个撤消操作

这很好,用户删除注释后,“撤消删除注释”菜单变为活动状态,但在使用“撤消删除注释”命令后,有一个“重做删除注释”菜单变为活动状态

当前,当我单击“重做删除注释”时没有发生任何事情,因为我没有注册操作。我不希望用户能够通过撤销/重做堆栈意外删除注释


是否可以添加撤消操作而不添加重做操作

不在常见情况下。这样做将违反平台标准撤销/重做机制的隐含契约。你希望你注册的东西是对称的。如果用户删除注释,则可用的撤消操作应将注释恢复。如果用户选择撤消,则重做操作将再次删除注释。如果用户由于撤消或重做而意外删除了便笺,这不重要,因为他们应该总是能够通过执行相反的操作将其取回,对吗


不要想得太多。

我不知道你是否可以,但我知道这是你真的不想做的事情。良好的应用程序设计中有一个概念,称为宽恕。如果有人删除了某些东西,改变了主意,然后发现自己没有能力撤销删除,这是不太宽容的。同时,您需要弄清楚为什么没有相应的撤销操作,并且您可以自定义撤销菜单项字符串,这样就不那么容易混淆了。还原说明,也许?NSUndoManager将维护撤消和重做堆栈。使用“重做删除”按钮时,将重新显示“撤消删除”。因此,不可逆事故不存在任何问题。