Представление никогда не перезагружается (viewdidload никогда не вызывается) после вызова viewdidunload после предупреждения о памяти - PullRequest
0 голосов
/ 22 февраля 2011

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

Когда я получаю предупреждение о памяти, вызывается viewdidunload, и представление сбрасывается, как и ожидалось. Однако они никогда не воссоздаются, и viewdidunload никогда не вызывается снова. Контроллер основного вида подключен к контроллеру навигации.

Что дает?

Ответы [ 3 ]

0 голосов
/ 26 февраля 2011

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

Viewdidappear никогда не вызывается и для представлений, я подозреваю, что это связано с какими-либообъяснение есть.

0 голосов
/ 04 июля 2012

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

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

Задача контроллера контейнера - загрузить представление его дочерних элементов (видимых) и расположить их в своем собственном представлении.

0 голосов
/ 25 февраля 2011

Когда появляется предупреждение о памяти, система может выгружать виды контроллера представления, которые не были видны на экране в это время. Действие, которое запускает перезагрузку этих представлений контроллера представления, на самом деле пытается получить доступ к этим представлениям. Другими словами, когда выполняется некоторый код, который обращается к viewController.view, если это представление было выгружено, оно перезагружается.

На практике это означает, что ваши незагруженные представления будут автоматически перезагружаться в том месте, где они будут показаны снова. Поэтому после предупреждения о памяти измените текущий вид, используя вариант контроллера вкладок, и вы должны увидеть, что он перезагружается (если он действительно был выгружен).

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