Проблемы родительского просмотра с UIImagePickerControllerSourceTypeCamera - PullRequest
3 голосов
/ 24 января 2010

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

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

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

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

1 Ответ

3 голосов
/ 24 января 2010

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

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

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

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