UIImagePickerControllerSourceTypeCamera аварийно завершает работу в симуляторе IPHONE? - PullRequest
1 голос
/ 23 февраля 2011

Известна ли проблема, что если вы попытаетесь протестировать ваш UIImagePickerController, используя Camera в качестве типа источника, то симулятор потерпит крах?

У меня есть следующий код:

self.imgPicker = [[UIImagePickerController alloc] init];
self.imgPicker.allowsEditing = NO;
self.imgPicker.delegate = self;
[self.imgPicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[self presentModalViewController:self.imgPicker animated:YES];
[imgPicker release];

Запустив это в симуляторе, я получаю objc-exception-throw ошибка в стеке @ - [UIImagePickerController setSourceType:].

Теперь, если я установлю тип источника в библиотеку фотографий, все будет работать гладко и нормально? В чем дело?

1 Ответ

10 голосов
/ 23 февраля 2011

Симулятор не имеет камеры и не может имитировать, чтобы сделать снимок (было бы неплохо использовать isight, но Apple не была так любезна).Однако ваш код не является безопасным, потому что, например, у старого ipod touch нет камеры, и в этом случае ваше приложение будет зависать на этом устройстве.

Как Apple рекомендует в UIImagePickerController документации :

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

1. Убедитесь, что устройство способно выбирать контент из нужного источника.Сделайте это, вызывая метод isSourceTypeAvailable: class, предоставляя константу из перечисления «UIImagePickerControllerSourceType».

2.Проверьте, какие типы носителей доступны для используемого вами типа источника, вызвав availableMediaTypesForSourceType.: метод класса.Это позволяет различать камеру, которая может использоваться для записи видео, и камеру, которая может использоваться только для неподвижных изображений.

3. С помощью контроллера средства выбора изображения настройте пользовательский интерфейс в соответствии с типами носителей, которые вы хотите использовать.сделать доступными - неподвижные изображения, фильмы или и то и другое - установив свойство mediaTypes.

4.Представьте пользовательский интерфейс, вызвав presentModalViewController: animated: метод текущего активного контроллера представления, передавая настроенный контроллер средства выбора изображений.в качестве нового контроллера представления.

5. Когда пользователь нажимает кнопку, чтобы выбрать вновь захваченное или сохраненное изображение или фильм, или отменяет операцию, закрывает средство выбора изображений с помощью объекта делегата.Для вновь захваченных носителей ваш делегат может затем сохранить его в Camera Roll на устройстве.Для ранее сохраненных носителей ваш делегат может затем использовать данные изображения в соответствии с назначением вашего приложения.

Таким образом, вам нужно вызвать isSourceTypeAvailable и последовательно задать свой sourceType.

...