Обновить содержимое контроллера представления при переходе приложения на передний план

У меня есть приложение с панелью вкладок, в которой есть несколько вкладок с пользовательским контентом. Когда каждый контроллер представления загружается, метод viewDidLoad отправляет HTTP-запросы к серверу для получения данных, а затем соответственно заполняет свое представление. Однако после загрузки всех данных представление остается прежним (если только контроллер представления не выгружается и не перезагружается).

Многие другие приложения с пользовательским контентом имеют аналогичное поведение, за исключением того, что каждое представление перезагружается, если приложение переходит в фоновый режим, а затем снова возвращается на передний план. То есть, когда пользователь переключается между различными вкладками, пока приложение активно, содержимое не обновляется автоматически. Если пользователь «выходит» из приложения, а затем возвращается к нему позже, просмотры будут перезагружены.

Существуют ли стандартные методы разработки приложения для подобного поведения? В частности, мне интересно, есть ли тонкости UIKit, которыми я могу воспользоваться, чтобы обновить свои представления о «перезапусках» приложения.

В противном случае, я предполагаю, что простой подход состоит в том, чтобы каждый контроллер представления регистрировал уведомления в viewDidLoad и прослушивал приложение, выходящее на передний план. Затем контроллер может ответить на каждое уведомление, перезагружая свои данные.


person pmc255    schedule 14.09.2010    source источник


Ответы (1)


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

person jer    schedule 14.09.2010
comment
Оптимизация для этого - это определение того, являетесь ли вы видимым венчурным капиталом. Если вас не видно, просто установите флаг загрязнения и обновите, когда и если вы действительно станете видимым. viewDidAppear: (BOOL) animated поможет вам с реализацией грязного флага. - person logancautrell; 14.09.2010
comment
Как определить, виден ли вид? Я думаю, что это действительно необходимо, поскольку постоянный ответ на UIApplicationDidBecomeActiveNotification приведет к ненужным расходам на перезагрузку данных для представлений, которые могут не отображаться. Однако viewDidAppear: на самом деле не совсем обеспечивает то, что нам здесь нужно, поскольку он не срабатывает, когда приложение становится активным. Кажется, что он срабатывает, только если представление появляется, когда приложение уже активно, но не если представление уже отображается, когда приложение переходит из неактивного в активное. - person pmc255; 15.09.2010