NSUserDefaults始终返回1而不是正确的整数

Jam*_*mes 0 xcode objective-c nsuserdefaults ios

我试图在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);
Run Code Online (Sandbox Code Playgroud)

并输出:

default level raw: 34
default level num: 1
Run Code Online (Sandbox Code Playgroud)

abe*_*ina 5

只需确保在NSUSerDefaults上调用synchronize:

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);
Run Code Online (Sandbox Code Playgroud)

  • 最好使用[默认为integerForKey:@"当前级别"]); (2认同)