为什么我的高分停止更新?

Why my highscore stopped updating?

我打了高分,几个小时前测试过,效果很好。我的最好成绩是 6,比赛挽救了它。但是现在,我的分数是 10,然后是 12,它仍然显示我的高分是 6。我很确定我在完成之后没有触及与那段代码相关的任何内容。 这是我的最高分:

override func didMoveToView(view: SKView) {
//highscore
var HighScoreDefaults = NSUserDefaults.standardUserDefaults().integerForKey("highscore")

if (score > HighScoreDefaults) {
    NSUserDefaults.standardUserDefaults().setInteger(score, forKey: "highscore")
    NSUserDefaults.standardUserDefaults().synchronize()
}
var showHighscore = NSUserDefaults.standardUserDefaults().integerForKey("highscore")

highScoreText.text = "Highscore : \(showHighscore)"
highScoreText.fontSize = 34
highScoreText.fontColor = SKColor.grayColor()

}

会出现什么问题?

编辑: 所以我将由@trojanfoe 编辑的代码放入 override func update(currentTime: NSTimeInterval) 函数中,它再次运行。老实说,我不知道是什么导致了这个问题,但是对于那些和我有同样问题的人——尝试更新而不是 didMoveToView

您的代码看起来应该可以工作,但是 NSUserDefaults synchronize 实际将数据写入磁盘时发生了变化(请参阅 this SO question)。

如果你知道新的最高分是多少,你可以通过使用这个(稍微更有效和更明显的)代码来完全避免这个问题:

override func didMoveToView(view: SKView) {
    //highscore
    var highScore = NSUserDefaults.standardUserDefaults().integerForKey("highscore")

    if (score > highScore) {
        highScore = score;
        NSUserDefaults.standardUserDefaults().setInteger(highScore, forKey: "highscore")
        NSUserDefaults.standardUserDefaults().synchronize()
    }

    highScoreText.text = "Highscore : \(highScore)"
    highScoreText.fontSize = 34
    highScoreText.fontColor = SKColor.grayColor()
}

(即避免额外阅读 NSUserDefaults)。