UserDefaults 不会在应用程序关闭并重新打开后保存数据
Posted
技术标签:
【中文标题】UserDefaults 不会在应用程序关闭并重新打开后保存数据【英文标题】:UserDefaults is NOT keeping data saved after app is closed and re-opened 【发布时间】:2019-02-24 00:06:41 【问题描述】:我目前遇到的一个问题是,如果我离开应用程序并返回,recordData
值不会保持保存状态。如果我在不关闭应用程序的情况下再次玩游戏,它确实会保持保存状态。
如果我关闭并重新打开应用程序,ant new score
将替换 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)
【问题讨论】:
当您启动应用程序时,似乎 recordData 将始终为 0。因此,任何分数都会更高,并将写入 UserDefaults。 【参考方案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")
【讨论】:
【参考方案2】:UserDefaults
保留数据,但您只设置文本标签而不设置变量recordData
。
将viewWillAppear
替换为
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
recordData = UserDefaults.standard.integer(forKey: "Record1A")
highScoreLabel1A.text = String(recordData)
【讨论】:
以上是关于UserDefaults 不会在应用程序关闭并重新打开后保存数据的主要内容,如果未能解决你的问题,请参考以下文章
Core Data 和 Userdefaults 不存储数据
Swift 5 将 AVAsset 保存到 UserDefaults