Подтвердить что ты не робот

Метод, вызванный в -viewWillLayoutSubviews, необъяснимо работает дважды

У меня есть следующий код в контроллере подробного представления:

- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];
    [self configureView];
}

Когда я перехожу к этому контроллеру представления с точкой останова в первой строке -configureView, кажется, что [self configureView] вызывается дважды. Однако:

  • В обоих случаях метод удаляется, стек выглядит следующим образом:

stack

  • Когда я комментирую [self configureView] в приведенном выше коде, он достигает нуля.
  • Как очевидно, что стек является одним и тем же оба раза, -configureView не вызывает себя рекурсивно.
  • -configureView вызывается только в приведенном выше коде.
4b9b3361

Ответ 1

От Документация Apple:

Метод viewWillLayoutSubviews также вызывается после изменения размера представления и размещения его родителем.

Данный viewWillLayoutSubviews вызывается всякий раз, когда изменение bounds отображается на контроллере, нет гарантии, что он будет вызываться только один раз. Он будет вызываться всякий раз, когда происходит поворот.

Ваш метод configureView, вероятно, лучше вызывается из другого места, возможно, в viewWillAppear, viewDidAppear или даже настраиваемый мутатор для элемента BirdDetail в соответствии с предложением Германа.

Ответ 2

Если вы следуете обычным шаблонам, тогда configureView вызывается в установщике detailItem. Проверьте метод сеттера. А [detailViewController setDetailItem:something] часто вызывается в prepareForSegue:.

Ключевой момент: это имеет значение?