我正在学习 Cocoa,并且我已经撤消了工作,没有太多麻烦。但是 setActionName: 方法让我很困惑。这是一个简单的示例:一个玩具应用程序,其窗口包含一个文本标签和两个按钮。按下开按钮,标签上显示“开”。按下关闭按钮,标签变为“关闭”。这是两个相关的方法(我为应用程序编写的唯一代码):
-(IBAction) turnOnLabel:(id)sender
{
[[self undoManager] registerUndoWithTarget:self selector:@selector(turnOffLabel:) object:self];
[[self undoManager] setActionName:@"Turn On Label"];
[theLabel setStringValue:@"On"];
}
-(IBAction) turnOffLabel:(id)sender
{
[[self undoManager] registerUndoWithTarget:self selector:@selector(turnOnLabel:) object:self];
[[self undoManager] setActionName:@"Turn Off Label"];
[theLabel setStringValue:@"Off"];
}
这是我的期望:
- 我点击开按钮
- 标签更改为“开”
- 在编辑菜单中是“撤消打开标签”项
- 我点击那个菜单项
- 标签更改为“关闭”
- 在编辑菜单中是“重做打开标签”项
事实上,除了最后一个之外,所有这些都按我的预期工作。编辑菜单中的项目显示为“重做关闭标签”,而不是“重做打开标签”。(当我单击该菜单项时,标签确实会变为 On,正如我所料,但这使菜单项的名称更加神秘。)
我有什么误解,我怎样才能让这些菜单项以我想要的方式显示?