简体   繁体   English

iOS NSUserDefaults检查浮点键是否存在

[英]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文档建议如果密钥不存在, floatForKeyreturn 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM