Objective-C: 从 UISwitch 获取选定值

Objective-C: Get Selected Value from 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

谁能看出我哪里出错了?

主要思想是使用适当的 boolForKey API,所以不用

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

像这样尝试:

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

来自苹果 docs

boolForKey:
Returns the Boolean value associated with the specified key.

除了已接受的答案之外,我还想提供一些关于这里发生的事情的见解。您正在设置一个布尔值但要求一个对象。您看到 1 (true) 是因为方法 returns 是一个对象,通过将其转换为布尔值,它只会检查它是否存在。