viewDidLoad вызывается, viewWillAppear не вызывается, представление не отображается на экране - PullRequest
7 голосов
/ 22 мая 2009

Обновление

Было упомянуто, что viewWillAppear и viewDidAppear не вызываются в соответствии с документами. Однако я не выполняю инициализацию в этих методах и не добавляю элементы пользовательского интерфейса в представление.

Я просто использовал их для установки точек останова, чтобы попытаться отладить это.

Есть еще идеи?


Оригинальный вопрос

Я в тупике. Я рефакторинг некоторого кода и столкнулся с некоторым странным поведением ....

Я инициализирую viewController A без кончика и устанавливаю вид программно.

viewDidLoad в контроллере A вызывается.

Внутри viewDidLoad viewController A я инициализирую viewController B с кончика.

Я добавляю viewControllerB.view как подпредставление viewControllerA.view

viewDidload контроллера B вызывается.


Тогда становится странно:

  1. viewWillAppear и viewDidAppear of viewController B никогда получить называется.

  2. viewControllerB.view никогда делает это на экране.

  3. Нет Ошибки.


Вещи, которые я проверял:

Правильно указано имя viewControllerBs Nib.

Выход View ViewControllerB подключен к представлению.

viewControllerB и его представление не равны нулю.

И в довершение всего, все отлично работает в SDK [отредактировано] бета 5!

Есть идеи? Это должно быть что-то глупое ..

Ответы [ 5 ]

21 голосов
/ 22 мая 2009

Если контроллер представления добавляется в иерархию представлений посредством кода, контроллер представления не будет получать сообщения viewWillAppear (или viewDidAppear). Если вы добавите его самостоятельно, вы должны отправить контроллеру представления сообщение самостоятельно.

3 голосов
/ 13 января 2010

Не забудьте позвонить

[super viewWillAppear:animated];

Где бы вы ни переопределяли его.

В документации сказано:

Если вы переопределите этот метод, вы должны вызвать super в какой-то момент вашей реализации.

1 голос
/ 25 июля 2009

Попробуйте

-(void) viewDidAppear:(BOOL)animated {
// whatever
}
0 голосов
/ 22 августа 2012

Полагаю, ваш взгляд не является корневым. Вы, вероятно, используете UINavigationController, поэтому попробуйте реализовать этот метод

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated

или этот

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

и добавьте в свой просмотр DidLoad

this.navController.delegate = self;

(не забудьте добавить протокол UINavigationControllerDelegate в ваш файл .h.

0 голосов
/ 25 августа 2009

Чтобы закрыть вопрос:

Я никогда не мог найти решение, но с тех пор SDK 3.0 стал стандартом, и вопрос стал спорным. Код работает правильно в текущих версиях SDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...