Cocoa 如何将NSMenuItem绑定到NSArrayController

Cocoa 如何将NSMenuItem绑定到NSArrayController,cocoa,binding,nstableview,nsarraycontroller,nsmenuitem,Cocoa,Binding,Nstableview,Nsarraycontroller,Nsmenuitem,如何将NSMenuItem的启用状态绑定到NSArrayController的选择?我已尝试将项目的启用状态绑定到控制器的SelectedObject或SelectedIndex,并且在任何情况下,当存在选择时,都不会启用menuitem。在IB中,我取消选中了“启用”复选框。我只是希望在表中有选择时启用NSMenuItem。我的表格允许多重选择,我还使用了一个绑定到SelectedObject的按钮。@count和按钮按预期启用/禁用,因此我认为使用相同的键路径也适用于menuitem,但没有

如何将NSMenuItem的启用状态绑定到NSArrayController的选择?我已尝试将项目的启用状态绑定到控制器的SelectedObject或SelectedIndex,并且在任何情况下,当存在选择时,都不会启用menuitem。在IB中,我取消选中了“启用”复选框。我只是希望在表中有选择时启用NSMenuItem。我的表格允许多重选择,我还使用了一个绑定到SelectedObject的按钮。@count和按钮按预期启用/禁用,因此我认为使用相同的键路径也适用于menuitem,但没有。这并不难,因为我无法通过谷歌找到答案,所以我认为这一定很简单。
感谢

启用的绑定必须获得一个
BOOL
值,不幸的是,它不会将任何旧对象视为布尔值True。然而,幸运的是,
NSValueTransformer
使得这样做很容易。中有两个名为的常量,您可以在IB的绑定窗格中使用它们


在您的情况下,可以将模型密钥路径绑定到“SelectedObject”,并在值转换器字段中输入“NSIsNotNil”。转换器为绑定提供它所需的
BOOL
值。

启用的绑定必须获得
BOOL
值,不幸的是,不能将任何旧对象视为布尔真。然而,幸运的是,
NSValueTransformer
使得这样做很容易。中有两个名为的常量,您可以在IB的绑定窗格中使用它们


在您的情况下,可以将模型密钥路径绑定到“SelectedObject”,并在值转换器字段中输入“NSIsNotNil”。转换器为绑定提供它所需的
BOOL
值。

好的,我试过了,但是当我将keypath设置为myarraycontroller.SelectedObject时,我得到了!上面写着“Xcode无法解析密钥路径”。顺便说一下,我使用的是Xcode 4。我的菜单项和arraycontroller在不同的XIB中,如果这有区别的话。嗯,是的,这确实有区别。你不能就这样绑在XIB上。其中一个中的对象无法了解另一个中的对象。您必须通过一个对象链接菜单项和阵列控制器,该对象具有指向两个XIB的链接。您的应用程序委托可能引用了第二个文件的所有者对象?这就是我所怀疑的。我确实有一个对我的应用程序委托的引用,当我在模型密钥路径字段(Xcode 4)中键入时,IB解析数组控制器名称,但当我添加SelectedObject,即(myArrayController.SelectedObject)时,我得到“!”并显示“Xcode无法解析输入的密钥路径”。哦,好吧,如果必须的话,我可以在代码中这样做。@Lazloman:我不知道IB中的自动完成是否反映了实际范围。可能吧。等一下。您的绑定不能是myArrayController。请选择对象。它必须是这样的:对象绑定到:文件的所有者;模型密钥路径:
myAppDelegateReference.myArrayControllerOutlet
;控制器键:
选择的对象
。您是否在第二个nib中放置了一个新对象,并将其设置为应用程序委托?那不行。它会创建另一个对象。是的,您将不得不编写一些代码,但它只是设置了两个IVAR,其中一个是IBOutlet。我确实将它设置为文件的所有者,我编写的其余部分是关键路径。好的,让我创建一个新的插座,看看它应该如何工作。我会回来的。好的,我试过了,但是当我将keypath设置为myarraycontroller.SelectedObject时,我得到了!上面写着“Xcode无法解析密钥路径”。顺便说一下,我使用的是Xcode 4。我的菜单项和arraycontroller在不同的XIB中,如果这有区别的话。嗯,是的,这确实有区别。你不能就这样绑在XIB上。其中一个中的对象无法了解另一个中的对象。您必须通过一个对象链接菜单项和阵列控制器,该对象具有指向两个XIB的链接。您的应用程序委托可能引用了第二个文件的所有者对象?这就是我所怀疑的。我确实有一个对我的应用程序委托的引用,当我在模型密钥路径字段(Xcode 4)中键入时,IB解析数组控制器名称,但当我添加SelectedObject,即(myArrayController.SelectedObject)时,我得到“!”并显示“Xcode无法解析输入的密钥路径”。哦,好吧,如果必须的话,我可以在代码中这样做。@Lazloman:我不知道IB中的自动完成是否反映了实际范围。可能吧。等一下。您的绑定不能是myArrayController。请选择对象。它必须是这样的:对象绑定到:文件的所有者;模型密钥路径:
myAppDelegateReference.myArrayControllerOutlet
;控制器键:
选择的对象
。您是否在第二个nib中放置了一个新对象,并将其设置为应用程序委托?那不行。它会创建另一个对象。是的,您将不得不编写一些代码,但它只是设置了两个IVAR,其中一个是IBOutlet。我确实将它设置为文件的所有者,我编写的其余部分是关键路径。好的,让我创建一个新的插座,看看它应该如何工作。我会回来的。