Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我应该在哪里从用户默认值加载数据?_Ios_Swift - Fatal编程技术网

Ios 我应该在哪里从用户默认值加载数据?

Ios 我应该在哪里从用户默认值加载数据?,ios,swift,Ios,Swift,我的应用程序实现了一个导航栏:它有一个主视图和一个设置视图。在设置视图中,我使用UserDefaults保存了一些用户的首选项。然后,当我返回主视图时,新的首选项不会出现。它只有在我重新打开应用程序后才会出现。我在ViewController的viewDidLoad方法中加载用户默认值。从设置视图返回到主视图后,似乎不会再次调用viewDidLoad方法。那么,我应该在哪里从用户默认值加载数据呢 下面是我加载首选项的方式: override func viewDidLoad() { su

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

下面是我加载首选项的方式:

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只调用一次,因此无法在那里刷新以前的视图控制器。