Тип источника 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?

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

Другие вопросы по тегам