Objective c 在基于文档的应用程序中管理上下文相关菜单

Objective c 在基于文档的应用程序中管理上下文相关菜单,objective-c,cocoa,Objective C,Cocoa,我有一个基于文档的应用程序,在文件菜单下有一个子菜单,它是上下文敏感的。我正试图找出适当的方法来管理它,我想我知道答案……但我想确保我没有遗漏一些明显/简单的东西 文档具有一个为每个文档实例化的NSWindowController,并且是该实例的NSWindowDelegate。在NSWindowController的-init和-dealoc方法中,我可以创建和删除NSMenu。但是,由于菜单是应用程序的全局菜单,而不是特定于单个文档(或者我认为是这样),我还必须删除菜单,并在通过NSWind

我有一个基于文档的应用程序,在文件菜单下有一个子菜单,它是上下文敏感的。我正试图找出适当的方法来管理它,我想我知道答案……但我想确保我没有遗漏一些明显/简单的东西

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

此外,我需要使
NSWindowController
成为
NSMenu
的委托,以便实现
-menuedsupdate
(同样,使委托与当前活动的
NSWindowController
保持同步)


这是正确的方法吗?

我在上下文相关菜单中使用的一个技巧是利用ValidateNuItem做的不仅仅是验证菜单项

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