iPhone viewDidAppear перестает срабатывать после загрузки / закрытия модального вида - PullRequest
3 голосов
/ 03 августа 2009

Я начинаю немного сходить с ума от этого.

У меня есть приложение для iphone с несколько сложной структурой представления, это приложение с вкладками с контроллером представления или контроллером навигации на каждой вкладке.

Основной контроллер для одной вкладки использует обратный вызов viewDidAppear для перезагрузки любых данных, которые были изменены с момента последнего отображения, и в большинстве случаев это работает нормально. Проблема, с которой я столкнулся, заключается в том, что когда я перемещаюсь в подпредставлениях (в пределах той же вкладки) с использованием стандартного механизма push / pop контроллера навигации, viewWillAppear и viewDidAppear в главном представлении всегда запускаются при переходе к нему. Однако, если я загружаю модальный контроллер представления и затем отклоняю его, viewWillAppear продолжает срабатывать, но viewDidAppear прекращает работу.

Я почти уверен, что это связано с необходимостью вручную вызывать эти обратные вызовы на модальном контроллере, но я не могу найти справочную информацию о том, как это сделать правильно. (Я вижу только эту ошибку viewDidAppear на оборудовании, в симуляторе она работает так, как я ожидал)

Если вам нужны дополнительные разъяснения, дайте мне знать и спасибо за любой вклад.

Ответы [ 2 ]

3 голосов
/ 04 августа 2009

Да, вот как это работает. Вам лучше перейти на использование viewWillAppear.

Это имеет дополнительное преимущество обновления данных до перерисовки экрана.

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

viewDidLoad следует использовать для одноразовых операций настройки:

  • Настройка заголовков
  • Создание подпредставлений, массивов контента
  • Все остальное, что связано с инфраструктурой рассматриваемого представления

После этого используйте viewWillAppear: чтобы сделать что-нибудь, связанное с обновлением данных. Вам не нужно вызывать какие-либо методы viewDid / viewWill вручную - это обрабатывается внутренностями UIView. viewDidLoad не сработает после того, как вы отклоните модальный контроллер представления, потому что, более чем вероятно, представление никогда не выгружалось . viewDidLoad срабатывает нормально при навигации по стеку контроллера представлений, поскольку новым представлениям требуется память, требующая выгрузки других представлений, а затем повторной загрузки при их повторном появлении.

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