2011-05-19 71 views
0

我還是新來的可可綁定,我甚至沒有找到這個問題的答案,即使經過看文檔。我想要做的是有一個分段控制,只有兩個部分。如果選擇了第一個段,那麼NSUserDefaults中的首選項應爲YES,但如果選擇了第二個段,則首選項應爲NO。這是通過代碼做的微不足道:將NSSegmentedControl綁定到布爾值?

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

但我想通過綁定(選定的索引看起來很有前途)。任何方式來做這樣的事情?謝謝!

回答

1

我想你已經知道了已經 - 綁定控件的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