我想检查存储的浮点数NSUserDefaults
是否预先存在。Apple 文档建议,如果密钥不存在,它floatForKey
会这样做。return 0
如何正确区分存储的 0 和不存在的密钥?
我想检查存储的浮点数NSUserDefaults
是否预先存在。Apple 文档建议,如果密钥不存在,它floatForKey
会这样做。return 0
如何正确区分存储的 0 和不存在的密钥?
查看是否已设置默认值的可靠方法是:
if (![[NSUserDefaults standardUserDefaults] valueForKey:@"foo"]) { ... }
无论数据类型如何,这都有效。
如果 objectForKey 为 nil,则不存在对象,因此 NSUserDefaults 中没有存储项目。
感谢 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];
}
这看起来够安全吗?