2

に保存されているフロートが既に存在するかどうかを確認したいNSUserDefaultsAppleのドキュメントでは、キーが存在しない場合は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 に答える