关于 ios:Integer 在 init 后变为 0

Integer changes to 0 after init

我正在使用 NSUserDefaults(StackOverflow 链接)在 iOS Swift (Sprite Kit) 游戏中保存高分。

声明如下:

1
var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("hiScore") as! Int

这会返回例如 \\'2\\' 作为高分。

如果高分被击败,我会这样做:

1
2
3
4
5
6
if self.score > self.savedScore {

            NSUserDefaults.standardUserDefaults().setObject(self.score, forKey:"hiScore")
            NSUserDefaults.standardUserDefaults().synchronize()
            println("Synced")
        }

然而,问题是self.savedScore2的初始值之后变成了0,导致高分在每场比赛后被保存,因为每个可能的分数都高于0

如果这个问题需要,可以提供额外的代码。

谢谢!


您从 NSUserDefaults 获得分数并将其保存在新变量中:

1
var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("hiScore")

saveScore 是您每次调用此代码时创建的变量。
之后,您将分数与 self.savedScore 进行比较,后者不同于savedScore:

1
if self.score > self.savedScore { ... }

将获得保存分数的第一行替换为:

1
self.savedScore: Int = NSUserDefaults.standardUserDefaults().integerForKey("hiScore")

你应该使用 integerForKey 来获取数据,当你保存它时使用 setInteger 而不是 setObject