iPhone - 如何检测NSUserDefaults standardUserDefaults中是否存在密钥

Oli*_*ver 32 iphone cocoa-touch preferences key-value nsuserdefaults

使用NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];,

我使用调用BOOL boolFromPrefs = [defaults boolForKey:@"theBoolKey"];来获取保存的BOOL值.

如果未找到密钥,则返回NO(boolForKey的默认行为).
但是...... NO可以是一个保存的设置.同样的事情intForKey

那么在尝试获取其值之前,如何测试密钥是否存在?

Mat*_*uch 63

以正确的方式执行并注册默认值.

NSDictionary *userDefaultsDefaults = @{
    @"SomeKey": @NO,
    @"AnotherKey": @"FooBar",
    @"NumberKey": @0,
};
[NSUserDefaults.standardUserDefaults registerDefaults:userDefaultsDefaults];
Run Code Online (Sandbox Code Playgroud)

在你使用任何东西之前这样做NSUserDefaults.开始application:didFinishLaunchingWithOptions:是一个安全的地方.

每次应用启动时都必须注册默认值.NSUserDefaults仅存储已明确设置的值.

如果使用默认值,则不必使用"isFirstLaunch"键检查,如其他答案中所建议的那样.
这将在您推出更新时帮助您,并且您想要更改项目的默认值NSUserDefaults.


Mar*_*ell 30

在转换为BOOL之前检查对象是否存在.

if ([defaults objectForKey:@"theBoolKey"] != nil) {
    boolFromPrefs = [defaults boolForKey:@"theBoolKey"];
} else {
    boolFromPrefs = DEFAULT_BOOL_VALUE;
}
Run Code Online (Sandbox Code Playgroud)


Tim*_*tin 24

我是这样做的:

NSUserDefaults *prefs = NSUserDefaults.standardUserDefaults;
if ([[prefs dictionaryRepresentation].allKeys containsObject:@"yourKey"]) {
  float yourValue = [prefs floatForKey:@"yourKey"];
}
Run Code Online (Sandbox Code Playgroud)


Joe*_*Joe 8

您可以使用测试objectForKey:,如果是n,则不设置.所有boolForKey都会NSNumber返回if if返回BOOL值.

  • MonoTouch用户注意:`ObjectForKey(key)`方法不可访问,因为它标记为内部.相反,使用索引器:`NSUserDefaults.StandardUserDefaults [key]`. (3认同)