NSUserDefaults for high score无法在iOS 8 Simulator上运行?

时间:2015-07-17 01:55:05

标签: swift ios8 integer nsuserdefaults

我尝试同步保存的数据但我的游戏仍然没有存储最高分。如果更高的话,我找不到将highScore替换为得分的错误。对不起,我是刚开始学习iOS编程的初学者。

init(size: CGSize, score: NSInteger) {

    super.init(size: size)
    self.backgroundColor = SKColor.whiteColor()

    //To save highest score
    var highscore = 0
    let userDefaults = NSUserDefaults.standardUserDefaults()
    if (score > highscore){
        NSUserDefaults.standardUserDefaults().setObject(score, forKey: "highscore")
        NSUserDefaults.standardUserDefaults().synchronize()
    }
    var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("highscore") as! Int


    //To get the saved score
    var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("highscore") as! Int

1 个答案:

答案 0 :(得分:2)

让我们逐步完成您的代码。

首先,你用0覆盖任何高分:

//To save highest score
let highscore = 0
let userDefaults = NSUserDefaults.standardUserDefaults()
NSUserDefaults.standardUserDefaults().setObject(highscore, forKey: "highscore")
NSUserDefaults.standardUserDefaults().synchronize()

然后,您正在检查“highscore”是否为默认值:

if let highscore: AnyObject = userDefaults.valueForKey("highscore") {

一些注意事项:

  • 您应该使用objectForKey(_:),而不是valueForKey(_:)
  • 但实际上您应该使用integerForKey(_:)而不是objectForKey(_:),因为highscore始终是Int
  • 您可以删除: AnyObject,因为objectForKey(_:)会返回AnyObject?

然后,我们进入代码:

    NSUserDefaults.standardUserDefaults().setObject(score, forKey: "highscore")
    NSUserDefaults.standardUserDefaults().synchronize()

您现在正在使用0覆盖之前添加的score分数。

最后,即使您在else条件之前执行此操作,highscore阻止永远不会被调用,也设置if

}
else {
    NSUserDefaults.standardUserDefaults().setObject(highscore, forKey: "highscore")
    NSUserDefaults.standardUserDefaults().synchronize()
}

从您的代码中不清楚您想要做什么,但您确实在您的问题中这样说:

  

如果将高分数替换为高分,我找不到什么错误。

嗯,首先,你永远不会检查哪一个更高。

我想你可能会尝试这样做:

let defaults = NSUserDefaults.standardUserDefaults()
let highscore = defaults.integerForKey("highscore")

if score > highscore {
    defaults.setInteger(score, forKey: "highscore")
    defaults.synchronize()
}