2

我想检查存储的浮点数NSUserDefaults是否预先存在。Apple 文档建议,如果密钥不存在,它floatForKey会这样做。return 0

如何正确区分存储的 0 和不存在的密钥?

4

3 回答 3

12

查看是否已设置默认值的可靠方法是:

if (![[NSUserDefaults standardUserDefaults] valueForKey:@"foo"]) { ... }

无论数据类型如何,这都有效。

于 2012-08-27T17:34:02.773 回答
0

如果 objectForKey 为 nil,则不存在对象,因此 NSUserDefaults 中没有存储项目。

于 2012-08-27T17:33:49.493 回答
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];
    }

这看起来够安全吗?

于 2012-08-27T17:36:50.997 回答