我正在使用“用户默认值”存储整数,但是我尝试存储的数字是通过segue(ageFromSettings)传输的,并且需要具有默认值。
问题在于,通过segue传输的数据在显示时会得到存储,但是在应用程序重新启动时会存储默认值。
任何想法如何保存通过segue传递的项目?
class ViewController: UIViewController {
@IBOutlet weak var youHaveLabel: UILabel!
@IBOutlet weak var daysLeftLabel: UILabel!
@IBOutlet weak var leftToLiveLabel: UILabel!
@IBAction func settingsButtonPressed(_ sender: Any) {
performSegue(withIdentifier: "toSettings", sender: nil)
}
var daysLeft = 0
var ageFromSettings = 36500
override func viewDidAppear(_ animated: Bool) {
UserDefaults.standard.set(ageFromSettings, forKey: "persistedAge")
if let age = UserDefaults.standard.object(forKey: "persistedAge") as? Int{
print("age: \(age)")
daysLeft = age
}
if daysLeft == 36500 {
daysLeftLabel.alpha = 0
youHaveLabel.alpha = 0
leftToLiveLabel.text = "Set your age in Settings"
} else if daysLeft == -1{
leftToLiveLabel.text = "Day On Borrowed Time"
} else if daysLeft == 0{
leftToLiveLabel.text = "Statistically, you died today"
} else if daysLeft == 1{
leftToLiveLabel.text = "Day Left to Live"
} else if daysLeft < 0 {
leftToLiveLabel.text = "Days on Borrowed Time"
}
if daysLeft > -1 {
daysLeftLabel.text = String(daysLeft)
} else {
daysLeftLabel.text = String(daysLeft * -1)
}
}
}
答案 0 :(得分:0)
问题是你在说:
UserDefaults.standard.set(ageFromSettings, forKey: "persistedAge")
if let age = UserDefaults.standard.object(forKey: "persistedAge") as? Int{
那是坚果。在第二行中,我们知道,UserDefaults包含一个persistedAge
键,我们知道它的值-因为您只需将它放在第一行中即可。即使您已经已经在上次运行的应用程序上设置了不同的persistedAge
值,也可以这样做。
删除第一行。如果您的目标是提供初始默认值,请使用register(defaults:_)
。那就是它的目的。仅在您还没有叫set(_:forKey:)
的情况下使用它。
答案 1 :(得分:0)
在您的情况下,您需要在视图控制器的persistedAge
方法中设置viewDidAppear(_:)
键的值每次。此后,您正在检索数据并尝试读取它,这有些多余。在后一种情况下,每次您的视图控制器出现时,您还将重置persistedAge
键的值。