【问题标题】:Objective-C: Get Selected Value from UISwitchObjective-C:从 UISwitch 获取选定的值
【发布时间】:2017-06-16 05:27:24
【问题描述】:

以下代码的行为与我预期的不同。我认为这可能与未正确处理 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

谁能看到我哪里出错了?

【问题讨论】:

    标签: objective-c boolean nsuserdefaults uiswitch


    【解决方案1】:

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

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

    试试这样:

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

    来自苹果docs

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

    【讨论】:

    • 是的,或者返回NSNumber的objectForKey,然后将boolValue发送给那个。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-06
      • 2020-03-21
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2012-03-02
      相关资源
      最近更新 更多