Objective c 我是否可以有条件地禁用仅在第一响应程序响应选择器时才启用的NSMenuItem?

Objective c 我是否可以有条件地禁用仅在第一响应程序响应选择器时才启用的NSMenuItem?,objective-c,macos,cocoa,nsmenu,nsmenuitem,Objective C,Macos,Cocoa,Nsmenu,Nsmenuitem,我有一个NSMenuItem,它根据第一响应者是否响应特定选择器而启用/禁用 我的问题是,在某些情况下,我不希望为第一响应者启用项目 但我不能在运行时有条件地删除方法定义来禁用菜单项 关于我的意思的示例: 我有一个基于NSDocument的应用程序,我有两个主要的子类--ImageDocument和VideoDocument 我有一个名为“捕获帧”的NSMenuItem,它将视频帧转换为图像。但显然,这应该在图像文档上禁用,并且仅在视频文档上启用 如果第一响应者响应-captureFrame V

我有一个
NSMenuItem
,它根据第一响应者是否响应特定选择器而启用/禁用

我的问题是,在某些情况下,我不希望为第一响应者启用项目

但我不能在运行时有条件地删除方法定义来禁用菜单项

关于我的意思的示例:
我有一个基于
NSDocument
的应用程序,我有两个主要的子类--
ImageDocument
VideoDocument

我有一个名为“捕获帧”的
NSMenuItem
,它将视频帧转换为图像。但显然,这应该在
图像文档
上禁用,并且仅在
视频文档
上启用

如果第一响应者响应
-captureFrame

VideoDocumentController
有一个方法,
-captureFrame
,因此它被启用。
ImageDocumentController
没有,因此该菜单项从未启用


但是,有一些特定的
视频文档
我不想启用该菜单项。为了处理特殊情况,我禁用此菜单项的最佳方法是什么?

VideoDocument
类中,重写
NSDocument
方法
validateUserInterfaceItem:
。或者,您可以在
NSDocumentController
的子类中重写
validateUserInterfaceItem:
。请务必调用
super
,以保留此方法的内置功能。请参见示例。

啊,好的,谢谢!您的答案实际上有点不正确,我必须在文档的控制器上使用
-validateNuItem
,而且我在调用
super
时也遇到了一个异常,所以我没有这样做。然后一切都正常了:D你能在我标记正确之前编辑你的答案吗?我在NSDocumentController中添加了重写的可能性。但如果它不起作用,你就做错了。NSDocumentController上的文档甚至说您应该在覆盖中调用
[super validateUserInterfaceItem:
。啊,我看到了这个问题,我说了
VideoDocumentController
,没有意识到这意味着我有一个子类
NSDocumentController
。在本例中,我的“控制器”是显示
视频文档的
NSViewController
的子类