Ios 我应该在哪里从用户默认值加载数据?
我的应用程序实现了一个导航栏:它有一个主视图和一个设置视图。在设置视图中,我使用UserDefaults保存了一些用户的首选项。然后,当我返回主视图时,新的首选项不会出现。它只有在我重新打开应用程序后才会出现。我在ViewController的viewDidLoad方法中加载用户默认值。从设置视图返回到主视图后,似乎不会再次调用viewDidLoad方法。那么,我应该在哪里从用户默认值加载数据呢 下面是我加载首选项的方式:Ios 我应该在哪里从用户默认值加载数据?,ios,swift,Ios,Swift,我的应用程序实现了一个导航栏:它有一个主视图和一个设置视图。在设置视图中,我使用UserDefaults保存了一些用户的首选项。然后,当我返回主视图时,新的首选项不会出现。它只有在我重新打开应用程序后才会出现。我在ViewController的viewDidLoad方法中加载用户默认值。从设置视图返回到主视图后,似乎不会再次调用viewDidLoad方法。那么,我应该在哪里从用户默认值加载数据呢 下面是我加载首选项的方式: override func viewDidLoad() { su
override func viewDidLoad() {
super.viewDidLoad()
numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault")
tipPercentage = defaults.double(forKey: "tipPercentageDefault") / 100.0
}
您可以在ViewController中移动变量,并在每次显示ViewController时调用,例如:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault")
tipPercentage = defaults.double(forKey: "tipPercentageDefault") / 100.0
}
您可以在ViewController中移动变量,并在每次显示ViewController时调用,例如:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault")
tipPercentage = defaults.double(forKey: "tipPercentageDefault") / 100.0
}
我认为在变量中使用didSet会有一些价值。下面是一个你可能会觉得有用的例子
class vc: UIViewController {
var numpplLabel: UILabel!
var tipLabel: UILabel!
var numberOfPeople: Double = 0 {
didSet {
guard oldValue != numberOfPeople else { return }
numpplLabel.text = "\(numberOfPeople) ppl"
}
}
var tipPercentage: Double = 0.2 {
didSet {
guard oldValue != tipPercentage else { return }
tipLabel.text = "\(tip)% tip"
}
}
var tip: Double { return tipPercentage*100 }
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault")
tipPercentage = defaults.double(forKey: "tipPercentageDefault")
}
}
我认为在变量中使用didSet会有一些价值。下面是一个你可能会觉得有用的例子
class vc: UIViewController {
var numpplLabel: UILabel!
var tipLabel: UILabel!
var numberOfPeople: Double = 0 {
didSet {
guard oldValue != numberOfPeople else { return }
numpplLabel.text = "\(numberOfPeople) ppl"
}
}
var tipPercentage: Double = 0.2 {
didSet {
guard oldValue != tipPercentage else { return }
tipLabel.text = "\(tip)% tip"
}
}
var tip: Double { return tipPercentage*100 }
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault")
tipPercentage = defaults.double(forKey: "tipPercentageDefault")
}
}
您不应该使用UserDefaults在视图控制器之间传递数据。他正在谈论设置,他可能需要将这些变量存储在同一个位置,可能是缓存,或者其他什么。关键是,由于viewDidLoad只调用一次,因此无法在那里刷新以前的视图控制器。您不应该使用UserDefaults在视图控制器之间传递数据。如果正在讨论设置,他可能需要将这些变量存储在同一个位置,可能是缓存,或者其他任何东西。问题是,由于viewDidLoad只调用一次,因此无法在那里刷新以前的视图控制器。