在基于文档的应用程序中管理上下文敏感的NSMenu

时间:2012-09-12 13:27:13

标签: objective-c cocoa

我有一个基于文档的应用程序,文件菜单中的子菜单是上下文相关的。我正在试图找出适当的方法来管理它,我想我知道答案......但是要确保我不会错过任何明显/简单的东西。

该文档具有为每个文档实例化的NSWindowController,并且是该实例的NSWindowDelegate。在NSWindowController的{​​{1}}和-init方法中,我可以创建和删除-dealloc。但由于菜单是应用程序的全局菜单,而不是特定于单个文档(或者我认为),我还必须删除菜单并在通过NSMenu的{​​{1}切换文档时重新创建它}和NSWindowDelegate(或者类似的......关键方法,我对这种区别有点模糊)

此外,我需要制作-windowDidBecomeMain -windowWillResignMain的委托,以便实施NSWindowController(同样,让代理与当前有效的{{}保持同步1}}。

这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

我一直用于上下文相关菜单的一个技巧是使用validateMenuItem做更多的事情而不仅仅是验证menuItems。

在您的情况下,您可以让应用程序委托菜单的委托,并在validateMenuItem内,如果菜单项是您需要更改的菜单项,则更改它。调用[NSDocumentManager sharedManager]获取当前活动文档的实例,并从中获取所需的任何信息以填充菜单项。