我想检查NSUserDefaults
中存储的浮点数是否已预先存在。 Apple文档表示如果密钥不存在,floatForKey
将return 0
。
如何正确判断存储的0和不存在的密钥之间的区别?
答案 0 :(得分:12)
查看是否已设置默认值的可靠方法是:
if (![[NSUserDefaults standardUserDefaults] valueForKey:@"foo"]) { ... }
无论数据类型如何,这都有效。
答案 1 :(得分:0)
如果objectForKey为nil,则不存在任何对象,因此NSUserDefaults中没有存储任何项目。
答案 2 :(得分:0)
感谢woz和Bernd Rabe。我的解决方案是:
//Set volume
id savedVolume = [[NSUserDefaults standardUserDefaults] objectForKey:@"GameVolume"];
if (savedVolume == nil) //Check if volume not already saved (e.g. new install)
{
//Set default volume to 1.0
float defaultVolume = 1.0;
[[ApplicationController controller].soundManager setGlobalVolume: defaultVolume];
[[NSUserDefaults standardUserDefaults] setFloat:defaultVolume forKey:@"GameVolume"];
} else {
float savedVolume = [[NSUserDefaults standardUserDefaults] floatForKey:@"GameVolume"];
[[ApplicationController controller].soundManager setGlobalVolume: savedVolume];
}
这看起来足够安全吗?