将NSSegmentedControl绑定到布尔值?

问题描述:

我还是新来的可可绑定,我甚至没有找到这个问题的答案,即使经过看文档。我想要做的是有一个分段控制,只有两个部分。如果选择了第一个段,那么NSUserDefaults中的首选项应为YES,但如果选择了第二个段,则首选项应为NO。这是通过代码做的微不足道:将NSSegmentedControl绑定到布尔值?

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

但我想通过绑定(选定的索引看起来很有前途)。任何方式来做这样的事情?谢谢!

我想你已经知道了已经 - 绑定控件的selectedIndex在IB:

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

似乎工作就好了。

问题是你真的需要BOOL?无论如何,这只是typedefsigned 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:,它应该工作正常。

+0

那么,我正在通过'boolForKey'访问首选项。该方法是否自动将“1”转换为YES,反之亦然? – 2011-05-19 01:57:26

+0

它们完全相同。如果你看objc.h,第43,49和50行是:'typedef signed char \t \t BOOL;','#define YES(BOOL)1'和'#define NO(BOOL)0'。任何你有'BOOL'的地方,你都可以把它看作一个整数。 – 2011-05-19 02:13:02

+0

谢谢。我还有关于绑定的另一个问题,不知道你是否可以提供帮助。当这个值改变时,我想另一个(绑定)值也改变。我将如何设置这些值来倾听这种偏好的变化?他们也通过IB建立。 – 2011-05-19 02:28:47