objective-c - NSUndoManager setActionName : doesn't change menu text

标签 objective-c cocoa nsstring nsmenu nsundomanager

我一直在为我的 cocoa 应用程序(OS 10.9)实现撤消功能,并且我已经使用 NSUndoManager 成功实现了撤消功能的实例。但是,我无法在编辑菜单下更改“撤消”文本!我正在使用 Apple 文档中详细介绍的 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 吗?如果是这样,则文档中缺少此内容!

提前致谢!

最佳答案

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

关于objective-c - NSUndoManager setActionName : doesn't change menu text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21129304/

相关文章:

cocoa - 在 Cocoa OSX 中捕获双击

iphone - 在 Interface Builder 中,当一组矩形项目位于背景项目之上时,如何选择它们?

iphone - 从Iphone SDK中的字符串中删除最后一个“/”

ios - 解析存储本地数据存储对象以缓存和清除它们?

ios - 如何将 UIImages 数组添加到 Collection View

objective-c - 带有捆绑自定义框架的 Cocoa 屏幕保护程序插件

macos - 以编程方式在 Mac OS X 上切换键盘查看器

iphone - ios 确定应用程序如何启动

cocoa - 条件语句中的多个 NSString

iphone - 僵尸报告 : message sent to deallocated instance