我在用户默认值中存储了一个整数,作为我游戏的最高分。每次开始游戏时,我都想检查分数是否大于之前的最高分,所以我这样做:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:highScoreNum forKey:@"highScoreNumber"];
if (highScoreNum <= score) {
highScoreNum = score;
SKLabelNode *highLabel = (SKLabelNode *)[self childNodeWithName:@"highLabel"];
highLabel.text = [NSString stringWithFormat:@"%ld", (long)highScoreNum];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:highScoreNum forKey:@"highScoreNumber"];
}
else if (highScoreNum > score) {
SKLabelNode *highLabel = (SKLabelNode *)[self childNodeWithName:@"highLabel"];
highLabel.text = [NSString stringWithFormat:@"%ld", (long)highScoreNum];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:highScoreNum forKey:@"highScoreNumber"];
}
在我声明变量的地方我这样做:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:highScore forKey:@"highScoreNumber"];
highLabel.text = [NSString stringWithFormat:highScore];
但我总是在 highScoreNum
中得到 0。
最佳答案
每次你这样做...
[defaults setInteger:highScore forKey:@"highScoreNumber"];
...您将 highScore 变量发送到默认值。如果您声明了 highScore,但没有获取以前保存的默认值(或者没有以其他方式初始化 highScore),那么您在这里看到的始终为零是有道理的。您可能一直将 nil 发送到默认值,默认值作为零整数值输入(并返回)。
在声明 *defaults 之后,您可能希望让 highScore 从默认值中存储适当的值,而不是调用 setInteger:forKey,如下所示:
highScore = [defaults integerFromKey:@"highScoreNumber"];
另外,不要忘记在适当的时候[默认同步]。
关于ios - 从 NSUserDefaults 检索到的整数始终为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23399512/