ios/objective-c:测试是否存在 NSUserDefault

ios/objective-c: Testing for existence of NSUserDefault

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

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

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

我只想设置之前没有设置的变量。

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

感谢您的帮助。

至于0和1是的,它们相当于NO和YES。所以你采用了正确的方法。

如果你想检查布尔值是否存在,那么 [userDefaults boolForKey:@"theKeyOfMyBOOL"]; returns 一个 BOOL,所以是或否(不是零)。

在内部,它存储为一个 NSNumber。所以,如果你调用

[userDefaults objectForKey:@"theKeyOfMyBOOL"];

如果你曾经存储过任何东西,你将得到一个 NSNumber,如果你没有存储过任何东西,你将得到一个 NSNumber。

所有值,包括像 BOOL 这样的基本类型,实际上都存储为对象(NSNumber 对象,在 BOOL 的情况下)并且对象可以是 nil, 意思是 "not set".

因此:

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