NavigationController?.setViewControllers работает с задержкой в методе viewDidAppear

#ios #swift5

#iOS #swift5

Вопрос:

navigationController?.setViewControllers работает с задержкой в override func viewDidAppear( , в других случаях, все работает нормально.

 override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    print(self.navigationController?.children)
    print(self.navigationController?.viewControllers)
    var array = self.navigationController?.children
    array!.insert(ViewController(), at: array!.count - 1)
    navigationController?.setViewControllers(array!, animated: false)
    print(self.navigationController?.viewControllers)
}
  

Он печатает:

 Optional([<One.ViewController: 0x7f9a1b4021e0>, <One.TwoViewController: 0x7f9a1b40e320>])
Optional([<One.ViewController: 0x7f9a1b4021e0>, <One.TwoViewController: 0x7f9a1b40e320>])
Optional([<One.ViewController: 0x7f9a1b4021e0>, <One.TwoViewController: 0x7f9a1b40e320>])
  

в других случаях это работает нормально. как нажатие кнопки.

 @IBAction func back(_ sender: Any) {
    print(self.navigationController?.children)
    print(self.navigationController?.viewControllers)
    var array = self.navigationController?.children
    array!.insert(ViewController(), at: array!.count - 1)
    navigationController?.setViewControllers(array!, animated: false)
    print(self.navigationController?.viewControllers)
}


Optional([<One.ViewController: 0x7f9a1b4021e0>, <One.ViewController: 0x7f9a1b520dc0>, <One.TwoViewController: 0x7f9a1b40e320>])
Optional([<One.ViewController: 0x7f9a1b4021e0>, <One.ViewController: 0x7f9a1b520dc0>, <One.TwoViewController: 0x7f9a1b40e320>])
Optional([<One.ViewController: 0x7f9a1b4021e0>, <One.ViewController: 0x7f9a1b520dc0>, <One.ViewController: 0x7f9a1b40cd10>, <One.TwoViewController: 0x7f9a1b40e320>])
  

Все работает так, как ожидалось.

Два метода работали один за другим.

Я думаю navigationController?.setViewControllers , что работает override func viewDidAppear( , немного задерживается.

Что такое механизм?

Комментарии:

1. что произойдет, если вы установите анимированное значение false в super.viewDidAppear(false)

2. @mbutan , как обычно, ничего особенного. Я не знаю, что заметить