У меня есть приложение, которое позволяет делать снимки на камеру iphone. Все работает как часы, но при тестировании на новом устройстве, на котором не хватило памяти, приложение камеры не закрывалось.
Итак, в основном я открываю средство выбора изображений с исходной камерой, у меня появляется всплывающее окно, в котором говорится: «Недостаточно свободного места для фотосъемки ...», а затем, когда я нажимаю ОК, я нахожусь в приложении камеры с закрытым затвором , и кнопки «сделать фото» и «отменить» неактивны. С этого момента единственное, что я могу сделать, это убить приложение, так как нет возможности покинуть этот экран.
В моем коде я вызываю камеру примерно так:
UIImagePickerController * photoPicker= [[UIImagePickerController alloc] init];
photoPicker.delegate = self;
photoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
if ([UIImagePickerController isSourceTypeAvailable:photoPicker.sourceType]) {
[self presentModalViewController:photoPicker animated:YES];
}
Объект, который вызывает это, конечно же, UIImagePickerControllerDelegate, и я реализую оба метода делегата (оба правильно реагируют на события успеха и отмены):
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
Это поведение «нет свободного места» не распространяется ни на один из методов делегата, поэтому я не могу программно закрыть приложение камеры.
Есть предположения?
РЕДАКТИРОВАТЬ:
При попытке запустить приложение в симуляторе, где камера недоступна, я заметил сбой приложения, потому что этот источник был недоступен. Я обнаружил, что простое назначение недоступного sourceType для photoPicker, даже до вызова контроллера, приведет к сбою приложения, поэтому я изменил код на следующий:
UIImagePickerController * photoPicker= [[UIImagePickerController alloc] init];
photoPicker.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
photoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
}else{
return;
}
[self presentModalViewController:photoPicker animated:YES];
Это все еще не решает мою проблему, но это интересный результат.
isSourceTypeAvailable
перед представлением средства выбора. Возможно, Apple подумала об этом случае. - person Jonathan Cichon   schedule 19.12.2012isSourceTypeAvailable
в моем коде в качестве условия для представления photoPicker, я просто разделил его, чтобы показать более простой фрагмент. Тем не менее, спасибо за вклад! Я отредактирую исходный пост с этим. - person manecosta   schedule 19.12.2012isSourceTypeAvailable
перед представлением photoPicker - не лучшее место для этого, так как если исходный код недоступен, он вылетает прямо при присвоении.sourceType
. Это все еще не помогло моей проблеме. Я обновлю свой исходный пост, чтобы отразить этот вывод. - person manecosta   schedule 19.12.2012