Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 将菜单项绑定到第一响应程序的属性_Cocoa_Interface Builder_Menuitem_Cocoa Bindings_Nsdocument - Fatal编程技术网

Cocoa 将菜单项绑定到第一响应程序的属性

Cocoa 将菜单项绑定到第一响应程序的属性,cocoa,interface-builder,menuitem,cocoa-bindings,nsdocument,Cocoa,Interface Builder,Menuitem,Cocoa Bindings,Nsdocument,我有一个基于文档的应用程序 在我的文档课上 我有一个BOOL属性:isActionAvailable 我还有一个iAction:-(iAction)doTheAction:(id)sender 现在,在main menu.xib中,我想将一个菜单项连接到操作。 当您知道Interface Builder中的第一个响应程序“代表”应用程序的活动文档时,这很容易做到 但如何将此项菜单的可用性(“启用属性”)与活动文档的BOOL属性isActionAvailable绑定? 事实上,在提议的名单中,

我有一个基于文档的应用程序

在我的文档课上

  • 我有一个BOOL属性:
    isActionAvailable
  • 我还有一个iAction:
    -(iAction)doTheAction:(id)sender
现在,在
main menu.xib
中,我想将一个菜单项连接到操作。 当您知道Interface Builder中的第一个响应程序“代表”应用程序的活动文档时,这很容易做到

但如何将此项菜单的可用性(“启用属性”)与活动文档的BOOL属性
isActionAvailable
绑定?

事实上,在提议的名单中,没有“第一响应者”。

两种选择:

  • 可以实现菜单验证,请参见。简而言之,在显示菜单之前,系统向处理操作的同一对象发送验证请求,其中包括第一响应者。您只需向文档类添加一个方法,该方法返回一个
    BOOL
    ;在您的情况下,您的
    是可能的
    属性
  • 使用
    NSDocumentController
    currentDocument
    属性返回与主窗口关联的文档。然后,您可以使用绑定来绑定
    .currentDocument.isActionAvailable
    。这种方法更通用,因为您可以将标签内容绑定到值等,也可以将其用于菜单绑定

  • “向您的文档控制器添加属性”:您的意思是我必须子类化
    NSDocumentController
    ?@Colas-没有必要子类化
    NSDocumentController
    ,我已经更新了答案以澄清这一点。