[英]iOS NSUserDefaults check if float key exists
I want to check if a float stored in NSUserDefaults
is pre-existing. 我想检查存储在NSUserDefaults
的浮动NSUserDefaults
已预先存在。 The Apple documentation suggests that it floatForKey
will return 0
if the key does not exist. Apple文档建议如果密钥不存在, floatForKey
将return 0
。
How do I correctly tell the difference between a stored 0 and a non-existent key? 如何正确区分存储的0和不存在的密钥?
A reliable way to see if a default has been set is: 查看是否已设置默认值的可靠方法是:
if (![[NSUserDefaults standardUserDefaults] valueForKey:@"foo"]) { ... }
This works regardless of the data type. 无论数据类型如何,这都有效。
如果objectForKey为nil,则不存在任何对象,因此NSUserDefaults中没有存储任何项。
Thanks to woz and Bernd Rabe. 感谢woz和Bernd Rabe。 My solution is this: 我的解决方案是:
//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];
}
Does that look safe enough? 这看起来足够安全吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.