【问题标题】:Where should I load data from user defaults?我应该在哪里从用户默认加载数据?
【发布时间】:2017-12-18 22:35:19
【问题描述】:

我的应用实现了一个导航栏:它有一个主视图和一个设置视图。在设置视图中,我使用 UserDefaults 保存了一些用户的首选项。然后当我回到主视图时,新的首选项不会出现。它仅在我重新打开应用程序后出现。我在 ViewController 的 viewDidLoad 方法中加载用户默认值。从设置视图返回到主视图后,似乎不会再次调用 viewDidLoad 方法。那么我应该在哪里加载来自用户默认值的数据呢?

这是我加载首选项的方式:

override func viewDidLoad() {
    super.viewDidLoad()
    numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault")
    tipPercentage = defaults.double(forKey: "tipPercentageDefault") / 100.0
}

【问题讨论】:

  • 你不应该使用 UserDefaults 在视图控制器之间传递数据
  • 他在谈论“设置”,他可能需要将这些变量存储在同一个地方,可能是缓存,或者其他什么。关键是,由于viewDidLoad 只被调用一次,previous 视图控制器的“刷新”不能在那里完成。

标签: ios swift


【解决方案1】:

您可以将变量移动到 viewWillAppear 中(每次出现 ViewController 时调用),例如:

override func viewWillAppear(_ animated: Bool) {
  super.viewWillAppear(animated)

  numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault")
  tipPercentage = defaults.double(forKey: "tipPercentageDefault") / 100.0
}

【讨论】:

    【解决方案2】:

    我认为您会发现将 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")
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2017-06-19
      • 2010-09-19
      • 2021-09-08
      • 2011-05-05
      • 2014-03-02
      相关资源
      最近更新 更多