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

时间:2015-08-04 16:18:57

标签: ios swift nsuserdefaults scoring

我几个小时前做了一个高分并经过测试,它运行良好。我的最高分是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

1 个答案:

答案 0 :(得分:0)

您的代码看起来应该可以正常工作,但是当 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)。