swift - UserDefaults 不会在应用程序关闭并重新打开后保存数据
问题描述
我目前遇到的一个问题是,recordData
如果我离开应用程序并返回,该值不会保持保存。如果我在不关闭应用程序的情况下再次玩游戏,它确实会保持保存状态。
如果我关闭并重新打开应用程序,ant newscore
将替换recordData
,因此highScoreLabel1.text
用新的score
. 即使新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")
}
推荐阅读
- spacy - 在 spacy 中匹配多令牌实体
- html - 滚动时如何将表单元素固定在屏幕底部显示?
- sql-server - 在 SQL Server 2019 / SSRS 中,SQL 数据库引擎和报表服务器名称是否应该不同?
- javascript - 如何在托管的 cordova 应用上使用 adMob?
- c# - 如何最好地将数据从一个外部流连续移动到另一个
- r - 缩放我的数值数据后,我没有得到我的国家变量
- java - 尝试在 Clojure 中将 Ring Jetty 与 Cognitect AWS-api 一起使用时遇到 ClassNotFoundException
- java - 尝试遍历列表
- java - Java流过滤指定变量,删除它并删除行中的下3个变量
- javascript - 为什么 DOMContentLoaded 处理程序可以阻止第一次绘制?