Objective-C:从UISwitch获取选定值

时间:2017-01-30 22:15:44

标签: objective-c boolean nsuserdefaults uiswitch

以下代码的行为与我的预期不符。我认为这可能与正确处理BOOLNSNumber或者我没有正确存储数字作为用户默认值有关。在任何情况下,从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 个答案:

答案 0 :(得分:2)

主要想法是使用适当的 boolForKey API,而不是

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

尝试这样:

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

来自Apple docs

  

boolForKey:
  返回与指定键关联的布尔值。

答案 1 :(得分:0)

除了接受的答案外,我还想提供一些有关这里发生的事情的信息。你正在设置一个布尔值,但要求一个对象。你看到1true)因为该方法返回一个对象并将其强制转换为布尔值,它只会检查它是否存在。