UserDefaults 不会在应用程序关闭并重新打开后保存数据
UserDefaults is NOT keeping data saved after app is closed and re-opened
我目前遇到的一个问题是,如果我离开应用程序并返回,recordData
值不会保持保存状态。如果我在不关闭应用程序的情况下再次玩游戏,它仍会保存。
如果我关闭并重新打开应用程序,ant new score
将替换 recordData
,从而用新的 score
更新 highScoreLabel1.text
。即使新 score
的值小于先前保存的 recordData
值,也会发生这种情况。请注意,当应用程序重新打开时,highScoreLabel1.text
会显示正确的高分。它只是在创建任何新的 score
后才保留它。因此,基本上它似乎 UserDefaults
仅在应用程序打开时有效,并且在应用程序关闭并重新打开后不会持续存在。我可能需要 AppDelegate
中的一些东西。有什么建议吗?
这是我的 highScore
和 UserDefaults
代码:
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)
}
只需在 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")
}
UserDefaults
保留数据,但您只设置文本标签而不设置变量 recordData
。
将viewWillAppear
替换为
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
recordData = UserDefaults.standard.integer(forKey: "Record1A")
highScoreLabel1A.text = String(recordData)
}
我目前遇到的一个问题是,如果我离开应用程序并返回,recordData
值不会保持保存状态。如果我在不关闭应用程序的情况下再次玩游戏,它仍会保存。
如果我关闭并重新打开应用程序,ant new score
将替换 recordData
,从而用新的 score
更新 highScoreLabel1.text
。即使新 score
的值小于先前保存的 recordData
值,也会发生这种情况。请注意,当应用程序重新打开时,highScoreLabel1.text
会显示正确的高分。它只是在创建任何新的 score
后才保留它。因此,基本上它似乎 UserDefaults
仅在应用程序打开时有效,并且在应用程序关闭并重新打开后不会持续存在。我可能需要 AppDelegate
中的一些东西。有什么建议吗?
这是我的 highScore
和 UserDefaults
代码:
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)
}
只需在 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")
}
UserDefaults
保留数据,但您只设置文本标签而不设置变量 recordData
。
将viewWillAppear
替换为
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
recordData = UserDefaults.standard.integer(forKey: "Record1A")
highScoreLabel1A.text = String(recordData)
}