在NSMenuItem中使用复选标记的正确方法

时间:2011-09-12 06:02:12

标签: objective-c macos cocoa

我有一个NSMenuItem。我希望menuitem的state又名value又名checkmark匹配我在对象中使用的布尔值。

我目前正在使用“已发送操作” - > “选择器”插座。将其拖到我的对象上,然后使用下面的IBAction:

- (IBAction) setMyGlobalBoolean:(id)sender
{
    if(globalBoolean)
    {
        globalBoolean = FALSE;
        [sender setState: NSOffState];
    }
    else if(!globalBoolean)
    {
        globalBoolean = TRUE;
        [sender setState: NSOnState];
    }
}

但是,我觉得我应该使用Bindings InspectorValue属性绑定到布尔变量。

问题在于,当我尝试这样做时,我无法将我的布尔值链接到该值。我可以将值连接到IB中的对象。但是“控制器密钥”字段是空白且不可编辑的。

我可以让Controller Key字段工作的唯一方法是将Value字段挂钩到Shared User Defaults Controller ...我不知道那是什么或为什么/如果我应该使用它

1 个答案:

答案 0 :(得分:0)

你已经提到你有一个全局布尔值(这表明它对你的应用程序是全局的)但是你也谈到了试图通过对象访问布尔值。

如果您想在NSUserDefaults中存储布尔值,那么您应该使用Shared Used Defaults Controller。您可以访问控制器密钥,因为它是一个控制器。

如果布尔值是您对象的成员,那么您应该创建访问器,以便它可以与键值编码一起使用。

如果布尔值确实是全局的,那么我认为你不能将值绑定到它。我建议您在App Delegate中创建“全局”布尔值,然后将NSMenuItem绑定到App Delegate。由于App Delegate不是控制器,因此您只需要使用globalBoolean作为模型密钥路径。