ios/objective-c : Testing for existence of NSUserDefault

标签 ios objective-c nsuserdefaults

我想测试是否定义了 NSUserDefault 值,如果没有定义它。但是,在变量的值为 0 的情况下,我认为与 NO 相同,以下是解析为 TRUE 并重置变量。

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"notifyOn"]){
         [prefs setBool:YES forKey:@"notifyOn"];
    }

换句话说,如果值为 0,![[NSUserDefaults standardUserDefaults] boolForKey:@"notifyOn"] 似乎为真。

我只想设置之前未设置的变量。

顺便说一句,当我将其记录到控制台时,我看到的是 1 和 0,而不是 YES 和 TRUE。我假设它们相同,但如果不同,请确认。

感谢您的帮助。

最佳答案

所有值,包括原始类型,如 BOOL,实际上都存储为对象(NSNumber 对象,在 BOOL 的情况下)和对象可以是nil,意思是“未设置”。

因此:

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"notifyOn"] == nil) {
    // Value is neither YES or NO
    // (same as setObject:@(YES) forKey:@"notifyOn")
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"notifyOn"];
}

关于ios/objective-c : Testing for existence of NSUserDefault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32628231/

相关文章:

ios - UIActivityViewController 包括而不是排除事件类型

ios - 如何在 NSUserDefaults 中存储多个字典

json - 将多个变量保存到 NSUserdefaults 并按保存顺序显示在另一个 View Controller 上的最佳方法是什么?

ios - 为什么 Apple 在类构造函数中对 instancetype 的使用不一致?

ios - 如何更改 MPMediaPickerController 的语言设置。

ios - 如何在一个 UITableView 中维护不同布局的单元格

iphone - 如何处理 UITableView 或 ScrollView 等触摸事件

iphone - 如何将 YouTube 整合到 iPhone 应用程序中

objective-c - NSUserDefaults registerDefaults bool 值 YES 返回 NO

ios - 由于按钮栏,横向 100% 的体高溢出