【问题标题】:Reading NSUserDefault bool读取 NSUserDefault 布尔值
【发布时间】:2011-10-19 15:30:28
【问题描述】:

我在尝试将布尔值注册为 NSUserDefault 时遇到问题。然后我希望以后能够读取这个布尔值。问题是,当我读取该值时,它没有将其作为YES 拾取。

这是我用来注册值的代码:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSMutableDictionary *appDefaults = [NSMutableDictionary dictionary];
[appDefaults setValue:@"YES"    forKey:kShowHelp];

[defaults registerDefaults:appDefaults];
[defaults synchronize];

然后我使用以下代码读取布尔值:

bool showHelp = [[NSUserDefaults standardUserDefaults] boolForKey:kShowHelp];

【问题讨论】:

    标签: objective-c nsuserdefaults boolean


    【解决方案1】:

    不要使用 setValue:forKey: 使用 setObject:forKey:

    [appDefaults setObject:[NSNumber numberWithBool:YES] forKey:kShowHelp];
    

    【讨论】:

    • 因为我无法将值添加到字典(以及其他)中,所以它只为我提供了setValue: 和setObject: 的选项
    • 你应该使用 setObject: -- 见上文
    • 当我阅读 bool 时,我需要做些不同的事情吗?由于某种原因,我似乎仍然没有拿起它。
    • @JonW09 你是把它改成 NSNumber 还是你还在用 setObject 写一个字符串?
    • 我现在使用的正是您在回答中提供的内容,但我仍然以与我的问题相同的方式阅读它。
    【解决方案2】:

    你为什么不使用setBool:forKey?

    [ appDefaults setBool: YES forKey: kShowHelp ];
    

    编辑

    好的,既然你有字典,你应该使用 NSNumber 来表示布尔值。

    示例

    NSUserDefaults * defaults = [ NSUserDefaults standardUserDefaults ];
    
    NSMutableDictionary * appDefaults = [ NSMutableDictionary dictionary ];
    [ appDefaults setObject: [ NSNumber numberWithBool: YES ] forKey: kShowHelp ];
    
    [ defaults registerDefaults: appDefaults ];
    [ defaults synchronize ];
    

    编辑 2

    您知道您还可以在应用程序的包中创建一个 plist,并将其值注册为默认值吗?更简单的恕我直言。

    【讨论】:

    • 因为我无法将值添加到字典(以及其他)中,所以它只为我提供了setValue: 和setObject: 的选项
    • 他的 appDefaults 是他用来注册默认值的字典,所以它没有 setBool:forKey: 方法。
    • 对字典使用 NSValue 或 NSNumber。
    猜你喜欢
    • 2016-10-22
    • 2018-01-20
    • 2021-09-14
    • 2014-10-19
    • 1970-01-01
    • 2011-08-21
    • 2020-10-21
    • 2017-10-10
    相关资源
    最近更新 更多