J'ai une application pour iPhone et iPad, et lorsque j'essaie de charger une UIPickerViewController
dans une UIPopoverController
pour iPad, le message Exception "Type de source 1 non disponible" .
@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];
}
C’est parce que vous ouvrez la caméra sur le simulateur ....... puisque le code est quelque chose comme [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]
.__ et que, évidemment, le simulateur n’a pas camera
... Procédez en donnant une alerte comme celle-ci,
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
}
Rien à craindre, cela fonctionnera correctement sur l'appareil!
Swift 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
}
Essayez-vous d'exécuter l'application dans un émulateur iPhone?
Si tel est le cas, l'émulateur ne prend pas en charge les fonctionnalités de l'appareil photo et ne prend en charge que l'obtention de photos à partir de la photothèque. On dirait que je devrais peut-être intégrer une solution de secours automatique, car de nombreuses personnes essaieront de tester leurs applications sur l'émulateur.