Ответ 1
Вид контроллера просмотра загружается при первом доступе к методу/свойства -view
на этом контроллере. После загрузки представления вызывается метод viewDidLoad
. Это довольно прямолинейно. Вы также должны помнить, что просмотр можно загружать/выгружать несколько раз, если предупреждения о памяти принимаются, когда представление отключено.
Итак, viewDidLoad
не означает, что ваш контроллер просмотра был вставлен в контроллер навигации. В процессе нажатия контроллера вида на контроллер навигации его view
будет доступен и загружен, но это произойдет до завершения всего нажатия. Таким образом, viewDidLoad
явно получает вызов до того, как свойство navigationController
было обновлено.
Вы также должны учитывать, что какая-либо другая часть вашего кода может получить доступ к представлению контроллера просмотра, прежде чем вы даже нажмете контроллер вида на контроллер навигации.
Итак, viewDidLoad
- это неправильное место, чтобы делать то, что вы делаете. Вероятно, вы захотите использовать такой метод, как viewDidAppear:
, чтобы вы знали, что представление контроллера просмотра является частью иерархии представлений при его вызове.