viewDidLoad вызывается дважды - PullRequest
       34

viewDidLoad вызывается дважды

3 голосов
/ 16 августа 2011

My viewDidLoad в контроллере вида вызывается дважды. Один раз [UIViewController View] и второй [UINib instanciateWithOwner:Options]. Почему это происходит? Можно ли это предотвратить?

Ответы [ 5 ]

7 голосов
/ 16 августа 2011

Любой код, который вы помещаете в viewDidLoad, должен запускаться несколько раз без каких-либо проблем.Если у вас есть код, который нужно запустить только один раз для вашего контроллера, используйте -awakeFromNib.Причина в том, что представление контроллера представления может быть выгружено и загружено несколько раз.Код внутри viewDidLoad должен только изменять пользовательский интерфейс, чтобы отражать текущее состояние.

Теперь, когда я понял это, ваша конкретная проблема выглядит как ошибка.См. Ответ Неда .

5 голосов
/ 16 августа 2011

Это та же проблема?

Почему viewDidLoad вызывается дважды, когда свойство rootViewController в UIWindow установлено?

Похоже, это может быть ошибка в XCode4.

1 голос
/ 16 августа 2011

Возможно, вам придется проверить механизм создания объекта.Если имеется только один файл пера со ссылкой на контроллер, этот метод не следует вызывать несколько раз.(если только объект не перестраивается).

Я думаю, что вам, возможно, придется сделать свой код в ViewDidLoad idemPotent.Всегда лучше убедиться, что методы обратного вызова фреймворка делают это предположение.

0 голосов
/ 14 мая 2014

В моем случае я использовал self.view (один раз) в viewDidLoad при вызове viewDidLoad в своих модульных тестах.Это привело к двум звонкам.Тем не менее, когда я заменил [testViewController viewDidLoad] на [testViewController view], проблема двойного вызова исчезла.

0 голосов
/ 16 октября 2013

Существует две возможности, из-за которых эта проблема часто возникала на моем устройстве iOS.

Правило № 1: Не вызывайте никакие настройки, связанные с просмотром, в функции [init], все настройки, связанные с просмотром, должны выполняться в viewDidLoad и viewWillAppear.

Правило № 2: проверьте viewDidLoad и viewWillAppear, они вызывают правильную суперфункцию? Например, viewDidLoad -> super viewDidLoad и т. Д.

Надеюсь, это поможет.

...