2009-08-05 8 views
2

Как настроить контроллер просмотра для обновления полей в представлении, только он нажимается на контроллер навигации и освобождает объекты, когда он выведен из представлений диспетчера навигации.Принудительно загружать/выгружать вид

Моя цель состоит в том, что для контроллера представления:

  1. Refresh дисплей только тогда, когда она помещается в стек навигации контроллера
  2. выпускает данные, когда он извлекается из стека навигации контроллера
  3. повторное использование (чтобы исключить загрузку/разгрузку xib-файлов)

Есть ли какие-либо методы делегата дляи viewWillBePopped:?

Пример

Скажем, у меня есть три слоя просмотров:

Movies (MovieListController) 
    --> Movie Basic Info (MovieInfoController) 
     --> Movie Credits (MovieCreditsController) 

Предположим, что мы имеем класс Movie для представления каждого фильма.

Здесь я хочу иметь только три UIViewController s, по одному экземпляру каждого в среде выполнения программы. Поэтому я могу повторно использовать то же самое MovieInfoController для разных фильмов и аналогично MovieCreditsController.

Однако мне бы хотелось, чтобы MovieInfoController обновил поля своего вида (например, название, дату выпуска и т. Д.) Только в том случае, если он помещен в стек. Внедрение дисплея в viewWillAppear заставит его обновлять поля, даже если вызывается .

Кроме того, я хочу, чтобы MovieInfoController опубликовал его ссылку на Movie, когда он выскочил, и любой потенциально большой объект (например, изображение обложки). Реализация этой логики в viewWillDisappear приведет к ее освобождению, когда она нажимает MovieCreditsController на стек.

Есть ли разумный? Неужели я ошибаюсь?

ответ

1

Вы на 90%, потому что создали объект фильма. MovieListController должен иметь один MovieInfoController. Он должен позвонить -setMovie: перед тем, как нажать его на контроллер навигации. Призыв к -setMovie: должен быть тем, что обновляет ваши поля.

Аналогично, MovieInfoController должен владеть единственным MovieCreditsController и должен называть его -setMovie: перед тем, как направить его на контроллер nav.

В MovieListController и MovieInfoController вы можете позвонить [subController setMovie:nil] в их -viewDidAppear:, чтобы освободить память.

+0

Это на самом деле то, что я делаю сейчас, за исключением того, что он называет 'drainFieldsInfo' вместо' setMovie: nil'. Я надеялся на что-то лучшее. Спасибо хоть! – notnoop

Смежные вопросы