Получите уведомление, когда контроллер представления собирается в iOS4 - PullRequest
10 голосов
/ 13 мая 2011

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

У меня есть UINavigationController, который порождает и помещает множество различных UIViewController в свой стек.Одна из них связана с некоторыми операциями с базовыми данными, которые необходимо сохранить, когда этот конкретный VC-файл извлекается из стека.Не зацикливайтесь на части Core Data, речь идет о выталкивании.

Как я могу подключиться к тому моменту, когда UIViewController будет вытолкнут из стека?

  • Я надеялся на какой-нибудь метод делегата, но не смог его найти.Протокол UINavigationControllerDelegate очень разреженный.
  • Затем я начал думать о том, чтобы использовать viewWillDisappear, но этот также вызывается, если другое представление помещается в стек * 1022.*, поэтому он не дает нужного момента.
  • В этом ответе на вопрос, начиная с 2009 года , решено посмотреть на viewWillAppear контроллера представления, к которому мы подключаемся', но так как этот вызов не имеет ссылки на VC, который должен выполнять проверку, это неудовлетворительно и приведет к уровню зависимости, который является контрпродуктивным (VC используется несколькими NC).
  • Другой ответ на вопрос, также из 2009 , выбирает подкласс UINavigationController и переписывает метод popViewControllerAnimated :.Или, в качестве альтернативы, используйте dealloc VC.Моя интуиция говорит мне, что это не может быть путь.
  • Наконец, есть последний последний вопрос от марта 2011 года , но никто не хотел на него отвечать.

Это оставляет меня в моем текущем неудовлетворенном состоянии ума.Есть ли кто-нибудь с лучшим решением для определения момента, когда ваш UIViewController извлекается из стека UINavigationController?

Приветствия,
EP.

Ответы [ 2 ]

9 голосов
/ 13 мая 2011

viewWillDisappear - соответствующий делегат.Вам нужно будет добавить логику в этот метод, если вы хотите определить, является ли текущее представление popped или новое представление push .Здесь ответили - viewWillDisappear: определить, подключен ли контроллер вида или отображается контроллер подвида

0 голосов
/ 13 мая 2011

Полагаю, я бы пошел в другом направлении и попытался бы отследить опрос от отдельных viewControllers, а не navigationController. Для отдельного viewController получение всплывающего окна выглядит так, как будто оно освобождено, и это полностью подключаемо.

Подкласс UIViewController, реализуйте свое уведомление в его -dealloc. Обязательно позвоните [super dealloc].

Затем имейте каждое представление, которое вы вставляете в подкласс контроллера навигации, в свой новый подкласс контроллера представления. Они могут делать все, что делают в своем собственном viewDidUnload, а затем вызывать [super dealloc] (в данном случае super - это ваш подкласс UIViewController), чтобы запустить уведомление.

...