2017-01-30 91 views
0

以下代碼的行爲並不像我所期望的那樣。我認爲這可能與正確處理BOOLNSNumber有關,或者可能我沒有正確存儲作爲用戶默認的號碼。在任何情況下,從UISwitch獲得一個值並嘗試將其保存爲用戶默認值後,我沒有獲得我認爲我正在保存的值。Objective-C:從UISwitch中獲取所選值

NSNumber * on = [NSNumber numberWithBool:self.onSwitch.on]; 
BOOL onBool = [on boolValue]; 
NSLog(@"onBool before save%d",onBool);//Logs as 0 
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
[prefs setBool:onBool forKey:@"on"];// 
[prefs synchronize]; 
BOOL onDefault = [[NSUserDefaults standardUserDefaults] objectForKey:@"on"]; 
NSLog(@"value of on after save%d",onDefault);//logs as 1 

任何人都可以看到我犯了什麼錯誤嗎?

回答

2

主要思想是使用適當的boolForKey API,所以不是

BOOL onDefault = [[NSUserDefaults standardUserDefaults] objectForKey:@"on"]; 

嘗試這樣的:

BOOL onDefault = [[NSUserDefaults standardUserDefaults] boolForKey:@"on"]; 

從蘋果docs

boolForKey:
返回與指定鍵關聯的布爾值。

+0

是或返回NSNumber的objectForKey,然後發送boolValue。 – danh

0

除了接受的答案之外,我想提供一些有關此處發生的事情的信息。你正在設置一個布爾值,但是要求一個Object。你看到1true),因爲該方法返回一個對象,並通過將其轉換爲布爾值來檢查它是否存在。