0

ゲームの現在のレベルをNSUserDefaultsに保存しようとしていますが、intに変換しようとすると、常に1が返されます。テストコードは次のとおりです。

    [[NSUserDefaults standardUserDefaults] setInteger:34 forKey:@"Current Level"];
    NSLog(@"default level raw: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"Current Level"]);
    self.levelNum = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Current Level"] intValue];
    NSLog(@"default level num: %i", self.levelNum);

そして出力:

default level raw: 34
default level num: 1
4

3 に答える 3

5

NSUSerDefaults で同期を呼び出すようにしてください。

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

[defaults setInteger:34 forKey:@"Current Level"];
NSLog(@"default level raw: %@", [defaults objectForKey:@"Current Level"]);

[defaults synchronize]; // Call synchronize after set

self.levelNum = [defaults integerForKey:@"Current Level"];
NSLog(@"default level num: %i", self.levelNum);
于 2012-09-26T04:13:58.380 に答える
3

あなたのコードに関する 1 つのことは、" setInteger" (NSInteger である) を使用していることです。

[defaults setInteger:34 forKey:@"Current Level"];

self.levelNum = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Current Level"] intValue]

これは、" " を読み取っている NSNumber オブジェクトを返すことを前提としていますint(必ずしも " " と同じとは限りませんNSInteger)。

その 2 番目の呼び出しの代わりに、次を使用します。

self.levelNum = [[NSUserDefaults standardUserDefaults ] integerForKey: @"Current Level"];

"integerForKey:"は、" " を使用している場合に使用する正しい方法ですsetInteger:forKey:

于 2012-09-26T04:19:29.517 に答える
0

おー。私の。神。私はアホです。レベルが既存のレベルの範囲外に設定されないように、カスタムのsetLevelNumメソッドを定義したことを忘れました。上記のコードは、レベルセットを定義する前に発生するため、自動的に最低レベルである1に設定されます。これを削除すると、機能するようになります。皆さんの助けに感謝します。少なくとも私はObjective-Cのデータ型について多くを学びました:-)

于 2012-09-26T04:50:20.530 に答える