将NSSegmentedControl绑定到布尔值?

时间:2011-05-19 01:36:31

标签: objective-c cocoa macos cocoa-bindings

我仍然是Cocoa Bindings的新手,即使在查看了文档后我也没有找到这个问题的答案。我想要做的是有一个只有两个段的分段控件。如果选择了第一个段,则NSUserDefaults中的首选项应为YES,但如果选择了第二个段,则首选项应为NO。通过代码可以做到这一点很简单:

-(IBAction)segmentSelectionChanged:(id)sender {
    NSInteger selectedSegment = [sender selectedSegment];
    [[NSUserDefaults standardUserDefaults] setBool:(selectedSegment==0)?YES:NO forKey:@"somepref"];
}

但我想通过绑定来做到这一点(所选索引看起来很有希望)。有办法做这样的事吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你已经拥有它 - 在IB中绑定控件的selectedIndex

Bind To: Shared User Defaults Controller
Controller Key: values
Key Path: WhateverYouWant

似乎工作正常。

真正的问题是否需要BOOL?无论如何,typedef只是signed char。见objc.h,第43,49和50行:

typedef signed char     BOOL;
// ...
#define YES             (BOOL)1
#define NO              (BOOL)0

您可以使用integerForKey:将值拉回并投出(可能更好,因为更明确):

(BOOL)[[NSUserDefaults sharedUserDefaults] integerForKey:@"WhateverYouWant"];

或者继续使用boolForKey:,它应该可以正常工作。