以下代码的行为与我的预期不符。我认为这可能与正确处理BOOL
和NSNumber
或者我没有正确存储数字作为用户默认值有关。在任何情况下,从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
任何人都可以看到我在哪里犯了错误吗?
答案 0 :(得分:2)
主要想法是使用适当的 boolForKey API,而不是
BOOL onDefault = [[NSUserDefaults standardUserDefaults] objectForKey:@"on"];
尝试这样:
BOOL onDefault = [[NSUserDefaults standardUserDefaults] boolForKey:@"on"];
来自Apple docs
boolForKey:
返回与指定键关联的布尔值。
答案 1 :(得分:0)
除了接受的答案外,我还想提供一些有关这里发生的事情的信息。你正在设置一个布尔值,但要求一个对象。你看到1
(true
)因为该方法返回一个对象并将其强制转换为布尔值,它只会检查它是否存在。