NSUserDefaults总是返回1而不是正确的整数
我试图在NSUserDefaults中存储我的游戏的当前级别,但当我尝试将其转换为int时,它总是返回1。下面是测试代码:NSUserDefaults总是返回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
只要确保呼吁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);
它更好使用[默认值integerForKey:@“Current Level”]); –
伟大的提示,谢谢!我逐字地粘贴了你的代码,它仍然给我34个原始数据和1个整数值。任何其他想法? –
嗯..我试过代码,当然我不能复制你在说什么......其他任何东西(另一个线程)可能运行setInteger:1? – abellina
一件事是,你正在使用“setInteger
”(这是一个NSInteger)
[defaults setInteger:34 forKey:@"Current Level"];
与
self.levelNum = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Current Level"] intValue]
它假定您返回您从中读取的“int
”(不一定是同样的事情为“NSInteger
”)一个NSNumber的对象。
而不是第二个电话,请使用:
self.levelNum = [[NSUserDefaults standardUserDefaults ] integerForKey: @"Current Level"];
"integerForKey:"
是当你使用“setInteger:forKey:
”使用正确的方法。
啊,你是对的。那是一个问题,虽然问题仍然存在。 –
将你的''levelNum''声明从''int''改为''NSInteger'“,并且知道它是否对你有好处。 –
NSInteger是一个相当于int或long的typedef:http://stackoverflow.com/a/1753275/1344738 – abellina
哦。我的。神。我是个白痴。我忘记了我定义了一个自定义的setLevelNum方法,以防止级别设置在现有级别的范围之外。由于上面的代码在我定义了关卡集之前就已经出现了,它会自动将其设置为最低级别,即1。谢谢大家的帮助。至少我学到了很多关于Objective-C数据类型的知识:-)
什么是“'levelNum'”声明为? –
levelNum被声明为int。 –