将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
?无论如何,这只是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:
,它应该工作正常。
那么,我正在通过'boolForKey'访问首选项。该方法是否自动将“1”转换为YES,反之亦然? – 2011-05-19 01:57:26
它们完全相同。如果你看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
谢谢。我还有关于绑定的另一个问题,不知道你是否可以提供帮助。当这个值改变时,我想另一个(绑定)值也改变。我将如何设置这些值来倾听这种偏好的变化?他们也通过IB建立。 – 2011-05-19 02:28:47