我在一个不同的视图控制器中有一个游戏,它有三种不同的游戏模式和一个高分屏幕。我使用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()
}
}
我的逻辑出了什么问题?