Тип источника 1 недоступен
У меня есть приложение для iPhone и iPad, и когда я пытаюсь загрузить UIPickerViewController
в UIPopoverController
для iPad я получаю исключение "Источник типа 1 недоступен". получить проблему даже при использовании устройства.
@try {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.delegate = self;
imagePicker.allowsEditing = NO;
self.tempComp = component;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
[self presentModalViewController:imagePicker animated:YES];
}else {
// We are using an iPad
popoverController=[[UIPopoverController alloc] initWithContentViewController:imagePicker];
popoverController.delegate = self;
[popoverController presentPopoverFromRect:component.bounds inView:component permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
}else{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Camera Non Disponibile" message:@"La camera non è disponibile" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
}
}
@catch (NSException *exception) {
NSLog(@"Cattura eccezione %@", exception);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Eccezione" message:[NSString stringWithFormat:@"%@", exception] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
}
4 ответа
Это потому, что вы открываете камеру на симуляторе... так как код [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]
и, очевидно, симулятор не имеет camera
... Продолжайте давать предупреждение, как это,
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Device has no camera."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[myAlertView show];
}
else{
//other action
}
Ничего страшного, на устройстве будет работать правильно!
Свифт 3:
if !UIImagePickerController.isSourceTypeAvailable(.camera){
let alertController = UIAlertController.init(title: nil, message: "Device has no camera.", preferredStyle: .alert)
let okAction = UIAlertAction.init(title: "Alright", style: .default, handler: {(alert: UIAlertAction!) in
})
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
}
else{
//other action
}
Вы не можете использовать камеру с симулятором только с настоящим устройством. В симуляторе нет камеры, даже если она есть на Mac.
Вместо этого используйте библиотеку фотографий
imagePicker.sourceType = .photoLibrary
вместо того
imagePicker.sourceType = .camera
В симуляторе не будет камеры, даже если она есть у вашего Mac. Так что попробуйте использовать
picker.sourceType = .photoLibrary
вместо
picker.sourceType = .camera
который покажет коллекции изображений. Но не волнуйтесь, код будет хорошо работать на реальных устройствах.
Вы пытаетесь запустить приложение в эмуляторе iPhone?
В этом случае эмулятор не поддерживает функции камеры и поддерживает только получение фотографий из библиотеки фотографий. Похоже, мне стоит создать автоматический откат, потому что многие люди будут пытаться протестировать свои приложения на эмуляторе.