我有一个基于文档的应用程序,文件菜单中的子菜单是上下文相关的。我正在试图找出适当的方法来管理它,我想我知道答案......但是要确保我不会错过任何明显/简单的东西。
该文档具有为每个文档实例化的NSWindowController
,并且是该实例的NSWindowDelegate
。在NSWindowController
的{{1}}和-init
方法中,我可以创建和删除-dealloc
。但由于菜单是应用程序的全局菜单,而不是特定于单个文档(或者我认为),我还必须删除菜单并在通过NSMenu
的{{1}切换文档时重新创建它}和NSWindowDelegate
(或者类似的......关键方法,我对这种区别有点模糊)
此外,我需要制作-windowDidBecomeMain
-windowWillResignMain
的委托,以便实施NSWindowController
(同样,让代理与当前有效的{{}保持同步1}}。
这是正确的方法吗?
答案 0 :(得分:0)
我一直用于上下文相关菜单的一个技巧是使用validateMenuItem做更多的事情而不仅仅是验证menuItems。
在您的情况下,您可以让应用程序委托菜单的委托,并在validateMenuItem内,如果菜单项是您需要更改的菜单项,则更改它。调用[NSDocumentManager sharedManager]获取当前活动文档的实例,并从中获取所需的任何信息以填充菜单项。