Событие для первой загрузки контроллера представления в UINavigationController? - PullRequest
2 голосов
/ 14 сентября 2011

Когда мой контроллер представления впервые представлен, я хочу, чтобы он потенциально обновлял кэш, который предоставляет данные для этого представления. Однако когда пользователь нажимает кнопку «Назад» на контроллере более глубокого просмотра, чтобы вернуться к этому контроллеру представления, я не хочу снова обновлять кэш.

Какое событие мне следует использовать?

  • in init, у меня пока нет всех необходимых мне параметров.
  • viewWillAppear будет запускаться каждый раз, когда появится вид.
  • viewDidLoad будет запускаться каждый раз, когда представление загружается из пера, что, как я полагаю, может произойти во второй раз, если есть предупреждение памяти. (Или это неправильно?) Поскольку это , а не резидентный кэш-память, кажется, что это неправильное место для обработки.
  • заставить вызывающего абонента вызывать что-то лишнее не элегантно, если для этого есть встроенный способ.

Для пояснения, это не резидентный кэш памяти. Это анализ файла XML в двоичный файл. Двоичный файл загружается и выгружается в viewDidLoad и viewDidUnload. Это является обязательным условием для этого шага, чтобы убедиться, что двоичный файл обновлен до его загрузки.

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Использование init может работать, но я бы порекомендовал простой подкласс UINavigationController.Создайте новый метод с именем setRootTableViewController:(UITableViewController *)controller или что-то в этом роде.В реализации метода вызовите это:

[controller.tableView reloadData];
[self pushViewController:controller animated:NO];

reloadData вызовет все ваши делегаты и методы источника данных и использует их для обновления таблицы.Если вы хотите вместо этого вызывать специальный вызов метода в вашем контроллере табличного представления, вы можете изменить объявление метода на setRootTableViewController:(CustomTableViewController *)controller (или как называется ваш пользовательский контроллер таблиц) и заменить строку reloadData на строку, которая вызывает этот метод.

Затем в вашем делегате приложения вместо создания UINavigationController и добавления своего настраиваемого контроллера представления создайте один из них и вызовите этот метод для добавления первого представления.

Однако, есливы используете перо, чтобы установить rootViewController, вы можете просто переопределить initWithRootViewController:(UIViewController *)controller, так как я представляю, что это будет то, что перо будет вызывать для установки первого представления в стеке:помогает!

0 голосов
/ 15 сентября 2011

загрузить кеш в viewDidLoad и освободить его в viewDidUnload и dealloc.

viewDidUnload вызывается при нехватке памяти.если вы хотите, чтобы ваше приложение оставалось отзывчивым, вы бы освободили столько памяти, сколько сможете.

хорошо объяснено здесь: Когда я должен выпускать объекты в - (void) viewDidUnload, а не в -dealloc

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