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

时间:2012-09-26 04:11:02

标签: objective-c ios xcode nsuserdefaults

我正在尝试在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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:3)

您的代码的一个方面是您使用的是“setInteger”(这是一个NSInteger)

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

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

假设您正在返回一个NSNumber对象,您正在从该对象中读取“int”(不一定与“NSInteger”相同)。

使用:

而不是第二次调用
self.levelNum = [[NSUserDefaults standardUserDefaults ] integerForKey: @"Current Level"];
当您使用“setInteger:forKey:”时,

"integerForKey:"是正确的方法。

答案 2 :(得分:0)

喔。我的。神。我是个白痴。我忘了我定义了一个自定义setLevelNum方法,以防止将级别设置在现有级别的范围之外。由于上面的代码在我定义级别集之前发生,它会自动将其设置为最低级别,即1.删除它,现在它可以工作。谢谢大家的帮助。至少我学到了很多关于Objective-C数据类型的知识: - )