首页 > 解决方案 > UserDefaults 不会在应用程序关闭并重新打开后保存数据

问题描述

我目前遇到的一个问题是,recordData如果我离开应用程序并返回,该值不会保持保存。如果我在不关闭应用程序的情况下再次玩游戏,它确实会保持保存状态。

如果我关闭并重新打开应用程序,ant newscore将替换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)
}

标签: swiftuserdefaults

解决方案


只需添加一行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")

} 

推荐阅读