2010-01-24 3 views
3

У меня есть странная проблема с UIImagePickerControllerSourceTypeCamera. Мое приложение дает возможность выбрать изображение из галереи или сделать снимок с помощью камеры. Если я выберу галерею, я выберу фотографию и вернусь к своему представлению, никаких проблем.Parent View issues with UIImagePickerControllerSourceTypeCamera

Однако при использовании UIImagePickerControllerSourceTypeCamera, кажется, что-то странное с моим представлением, когда я возвращаюсь к нему.

Например, у меня есть куча кода в методе viewDidLoad, который перемещает некоторые объекты в представлении, если он должен основываться на некоторых факторах - этот код вызывается, когда я выхожу из UIImagePickerControllerSourceTypeCamera, но не вызывается при выходе Галерея.

Ожидается ли это?

ответ

3

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

Вообще говоря, viewDidLoad должен иметь возможность обрабатывать вызовы несколько раз. Это не метод init. Он снова вызывается, если self.view получает значение nil, и позже его нужно воссоздать. Возможно, есть более подходящее место для размещения любого кода, который у вас есть, что вызывает проблемы, но методы init сложны, потому что назначенный инициализатор обходит загрузку nib.

При загрузке из наконечника вместо него вызывается класс initWithCoder класса, который обходит весь процесс инициализации, поскольку предполагается, что деархивирование всасывает уже инициализированный объект. Поэтому повторная инициализация объекта может привести к поломке вещей, например, вызвать loadView, который по существу противоречит тому, что содержит ниб, поскольку он должен программно построить то, что уже есть в нем. Вы все равно можете переопределить initWithCoder, как обычно, если вы проходите через args до super, как и следовало бы, но тогда это не будет вызвано, если вы инициализируете объект назначенным инициализатором. Конечно, если вам нужно беспокоиться об этом, вы можете поместить весь код, который вы хотите выполнить, как в метод, вызываемый из обоих переопределенных методов.

+0

Спасибо, это помогает мне понять немного. Предупреждение о памяти не повлияло на мой просмотр или приложение. Это странно, как будто вид есть, но он чувствует необходимость запуска методов viewDidLoad и viewWillAppear при возвращении к нему. – mootymoots

+0

Я также заметил, что, поскольку мое представление является частью навигационного представления, оно помещает стек вверх. Если я вернусь из представления, что камера перепуталась с корневым представлением, в моем корневом представлении появится еще одна кнопка назад, чтобы вернуться в никуда ... Кажется совершенно ментальным. Мой стек тогда полностью перепутался и сумасшедший, ничего, кроме перезагрузки приложения, это исправит. Чтобы помочь людям понять, у меня есть контроллер корневого представления, который создает контроллер newView и выводит его на экран. Затем используйте камеру. – mootymoots

+0

Перезагрузка телефона исправлена ​​это ...?!?! – mootymoots