在应用关闭并重新打开后,UserDefaults不会保留数据

时间:2019-02-24 00:06:41

标签: swift userdefaults

我当前遇到的一个问题是,如果我离开应用程序并返回,则recordData值不会保留。如果我在不关闭应用程序的情况下再次玩游戏,它仍会保存。

如果我关闭并重新打开该应用程序,则新的score将替换recordData,从而用新的highScoreLabel1.text更新score。即使新的score小于先前保存的recordData值,也会发生这种情况。请注意,highScoreLabel1.text确实会在重新打开应用程序时显示正确的高分。在创建任何新的score之后,它只是不保留它。因此,基本上UserDefaults似乎只在打开应用程序时起作用,而在关闭并重新打开应用程序后不再持久。我可能在AppDelegate中需要一些东西。有什么建议吗?

这是我的highScoreUserDefaults代码:

var recordData = 0

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    highScoreLabel1A.text = String(UserDefaults.standard.integer(forKey: "Record1A"))
}

func highScore() {
    guard gameMode == 0, let score = Int(scoreLabel.text!), score > recordData else { return }
    recordData = score
    UserDefaults.standard.set(recordData, forKey: "Record1A")
    highScoreLabel1B.text = String(recordData)
}

2 个答案:

答案 0 :(得分:1)

只需在viewWillAppear中添加一行,即可将recordData设置为先前保存的高分...

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // high score code
    highScoreLabel1A.text = String(UserDefaults.standard.integer(forKey: "Record1A"))

    // This code will set recordData to the previously saved High Score value, thus avoiding "0"
    recordData = UserDefaults.standard.integer(forKey: "Record1A")

} 

答案 1 :(得分:0)

UserDefaults保留数据,但是您仅设置了文本标签,而没有设置变量recordData

viewWillAppear替换为

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    recordData = UserDefaults.standard.integer(forKey: "Record1A")
    highScoreLabel1A.text = String(recordData)
}