使用NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
,
我使用BOOL boolFromPrefs = [defaults boolForKey:@"theBoolKey"];
之类的调用来获取保存的BOOL值。
如果未找到密钥,则返回NO(boolForKey的默认行为)
但是...... NO可以是一个保存的设置。 intForKey
那么在尝试获取其值之前,如何测试密钥是否存在?
答案 0 :(得分:62)
以正确的方式行事并register default values。
NSDictionary *userDefaultsDefaults = @{
@"SomeKey": @NO,
@"AnotherKey": @"FooBar",
@"NumberKey": @0,
};
[NSUserDefaults.standardUserDefaults registerDefaults:userDefaultsDefaults];
在使用NSUserDefaults
中的任何内容之前执行此操作。 application:didFinishLaunchingWithOptions:
的开头是一个安全的地方。
每次应用启动时都必须注册默认值。 NSUserDefaults仅存储已显式设置的值。
如果您使用默认值,则不必使用“isFirstLaunch”键检查,如其他答案中所建议的那样。
这将在您推出更新时帮助您,并且您想要更改NSUserDefaults
项的默认值。
答案 1 :(得分:30)
在转换为BOOL之前检查对象是否存在。
if ([defaults objectForKey:@"theBoolKey"] != nil) {
boolFromPrefs = [defaults boolForKey:@"theBoolKey"];
} else {
boolFromPrefs = DEFAULT_BOOL_VALUE;
}
答案 2 :(得分:24)
我是这样做的:
NSUserDefaults *prefs = NSUserDefaults.standardUserDefaults;
if ([[prefs dictionaryRepresentation].allKeys containsObject:@"yourKey"]) {
float yourValue = [prefs floatForKey:@"yourKey"];
}
答案 3 :(得分:8)
您可以使用objectForKey:
进行测试,如果为零,则不会设置。所有boolForKey都会返回NSNumber
返回(如果有)并返回BOOL
值。
答案 4 :(得分:2)
我建议为应用程序可能使用的任何键设置默认值。您可以在应用程序中执行此操作:didFinishLaunchingWithOptions:方法。这样你就会知道每个值都已经设定好了。
提示,将名为“defaultsSet”的键设置为YES,这样您只需执行一次。另外,请记得调用[[NSUserDefaults standardUserDefaults] synchronize]来保存值。
答案 5 :(得分:0)
基于MarkPowell回答的Swift示例
if (NSUserDefaults.standardUserDefaults().objectForKey("SomeBoolSetting") == nil) {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "SomeBoolSetting")
println("Bool WAS nil")
} else {
var boolValue:Bool? = NSUserDefaults.standardUserDefaults().boolForKey("SomeBoolSetting")
println("Bool WAS NOT nil \(boolValue)")
}
答案 6 :(得分:0)
@Tim Autin的快速版本答案:
if contains(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array, "chuiser_cook_orders_dirty") {
println("exist")
}
答案 7 :(得分:0)
不要让它复杂化:
if([NSUserDefaults.standardUserDefaults objectForKey:@"yourBoolKey"])
{
// Object Already Stored in User defaults
}
else
{
//Object not stored
}