NSUserDefaults不改变值

时间:2015-06-23 14:50:45

标签: ios swift nsuserdefaults

我在一个不同的视图控制器中有一个游戏,它有三种不同的游戏模式和一个高分屏幕。我使用NSUserDefaults存储高分,但值将在应用程序的整个运行时间内发生变化。

应用程序将正确保存高分,当我按清除时,分数将全部设置为0,它将显示在屏幕上。如果我离开应用程序并返回,分数仍然为零,但如果我重播其中一种游戏模式并返回高分屏幕,所有分数将重置为他们清除它们之前的位置。

例如:街机得分== 4,简易得分== 7,对面得分== 21
我清除了分数,它们都被设置并显示为零。然后我玩街机模式并获得6分并返回高分屏幕。值应为(arcade == 6,easy == 0,reverse == 0),但它们显示为arcade == 6,easy == 7,opposite == 21.

在其中一个GameViewControllers中:

func lose(){    
    // save score
    let defaults = NSUserDefaults.standardUserDefaults()
    var arcade_score = defaults.integerForKey("arcade")
    if(arcade_score < cur+1){                  // cur == current level
        defaults.setInteger(cur+1, forKey: "arcade")
        defaults.synchronize()
    }
}

只要玩家输掉游戏,就会调用此方法。此方法在每个游戏控制器中类似,但将值存储在不同的键中。

在我的HighScoreViewController中,我加载并显示viewDidLoad()方法中的值,并有一个清除值的按钮:

class HighScoreViewController: UIViewController {

    @IBOutlet weak var arcade: UILabel!
    @IBOutlet weak var easy: UILabel!
    @IBOutlet weak var opposite: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        let defaults = NSUserDefaults.standardUserDefaults()
        var arcade_score = defaults.integerForKey("arcade")
        var easy_score = defaults.integerForKey("easy")
        var opposite_score = defaults.integerForKey("opposite")

        arcade.text = String(arcade_score)
        arcade.sizeToFit()
        easy.text = String(easy_score)
        easy.sizeToFit()
        opposite.text = String(opposite_score)
        opposite.sizeToFit()
    }

    @IBAction func clearScores(sender: UIButton) {
        let defaults = NSUserDefaults.standardUserDefaults()
        defaults.setInteger(0, forKey: "arcade")
        defaults.setInteger(0, forKey: "easy")
        defaults.setInteger(0, forKey: "opposite")
        defaults.synchronize()
        arcade.text = String(defaults.integerForKey("arcade"))
        arcade.sizeToFit()
        easy.text = String(defaults.integerForKey("easy"))
        easy.sizeToFit()
        opposite.text = String(defaults.integerForKey("opposite"))
        opposite.sizeToFit()
    }
}

我的逻辑出了什么问题?

0 个答案:

没有答案