cocoa - NSUndoManager setActionName: 不更改菜单文本

  显示原文与译文双语对照的内容

我已经为我的应用程序( 操作系统 10.9 ) 设置了撤销功能,并且成功地使用NSUndoManager实现了一个撤销功能的。 但是,我无法在编辑菜单下更改"撤消"文本 ! 我在苹果文档中使用了setActionName方法。 我的相关方法:


- (void)FinishEditingName {

[[self UndoManager] registerUndoWithTarget:[self TestObject] selector:@selector(setName:) object:[NSString stringWithFormat:@"Testing Undo!"]];
[[self UndoManager] setActionName:@"Edit Name"];

[[self TestObject] setName:[NSString stringWithFormat:@"New Name"]];

NSLog([NSString stringWithFormat:@"%@",[[self UndoManager] undoActionName]]);

}

同样,撤消工作完美,换句话说,[[self TestObject] Name] 在调用这里方法时设置了"新名称",选择编辑-> 撤消将这里更改为"测试撤消"。 但是,第一个菜单项的编辑应该更改为文本"撤消编辑名称",但它不是,它只是"撤消"。 可以看到,我已经确认了应该通过将它与 NSLog ( ) 进行混合来改变文本,这很好( 例如 ) 。 它给了"编辑名称"我在这里找不到什么? 我需要将NSUndoManager链接到NSMenu? 如果是这样,文档中缺少这里文件 !

提前致谢!

时间: 作者:

好,我并不确定这里有什么问题,但是有两个关于NSUndoManager的相关事项:

⑴在一个应用程序中可以有多个 undoManagers,事实上通常有。 例如,当用户在文本中编辑文本时,通常使用自己的个人of来撤消键入和编辑。 这样,在用户接受她的条目之后,文档撤消堆栈上没有一组杂散的撤消操作。 ( 比如 。:"撤消键入一个字母""。键入另一个字母""撤消键入第三个字母"),相反,还有一个很好的"撤消更改"。"

因这里,如果在文件的of中设置名称,那么它不会在文档的undoManager—they中显示。

如果名称不能自动冒泡,则该名称将不会自动冒泡到事件( 但我对这个不太了解) 末尾的顶层水平。 这里没有任何嵌套,但值得注意的是。 有一个隐式撤消组在每个事件的开始处开始,结束时关闭,因这里如果你创建了另一个组。

作者:

问题是我没有使用 NSDocument,在这种情况下,菜单和NSUndoManager之间的链接不会自动设置- 你需要自己处理。 这似乎在NSDocument文档中,但不在NSUndoManager文档中,在那里,应该注意。 感谢你尝试帮助 !

作者:
...