ios - 从 NSUserDefaults 检索到的整数始终为 0

标签 ios objective-c cocoa-touch nsuserdefaults

我在用户默认值中存储了一个整数,作为我游戏的最高分。每次开始游戏时,我都想检查分数是否大于之前的最高分,所以我这样做:

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/

相关文章:

ios - libz.dylib 与 libz.1.2.3.dylib 与 libz.1.2.5.dylib

ios - Interface Builder中的颜色错误

ios - Objective-C:自定义类的 NSArray?

ios - 在 Objective-C 中使用 #define 并在 swift 类中访问

iphone - 如何在 NSUserDefaults 中设置 NSArray?

ios - 手动实例化 ViewController 并推到顶部。好的做法?

iphone - IOS 应用程序完全使用 HTML 5 创建 - 输入延迟...可以修复吗?

ios - UIImageView 无法正确调整大小

iphone - 在标签栏 Controller 之前显示登录屏幕

ios - 无法在 View Controller 中创建 socket /操作