118 votes

Erreur de découverte PhotoPicker: Domaine d'erreur = Code PlugInKit = 13

J'essaie d'afficher une image de la photothèque dans un UIImageView

L'erreur complète est:

2017-06-09 21: 55: 59.063307 + 0200 firstapp2.0 [12873: 1120778] Erreur de découverte PhotoPicker: Domaine d'erreur = Code de plug-in = 13 "requête annulée" UserInfo = {NSLocalizedDescription = requête annulée}

Mon code est inclus ci-dessous:

 import UIKit

class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate{

    @IBOutlet weak var pic: UIImageView!
    @IBOutlet weak var text: UILabel!

    var chosenImage : UIImage!

    override func viewDidLoad() {
        super.viewDidLoad()        
        pic.isUserInteractionEnabled = true;
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [AnyHashable: Any]) {
        var chosenImage = info[UIImagePickerControllerEditedImage]
        self.pic!.image = chosenImage as! UIImage
        picker.dismiss(animated: true, completion: nil)
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }

    @IBAction func tap(_ sender: Any) {        
        self.text.text = "Kreason"
        let imagePicker = UIImagePickerController()    
        imagePicker.delegate = self        
        imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
        imagePicker.allowsEditing = false    
        self.present(imagePicker, animated: true, completion: nil)
    }
}
 

39voto

Vous devez rendre explicite la référence Objective-C: @objc

 @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
    image = chosenImage
    self.performSegue(withIdentifier: "ShowEditView", sender: self)
    dismiss(animated: true, completion: nil)
}
 

18voto

user3159598 Points 153

J'ai trouvé cette solution. Nous avons eu cette erreur en raison de ces deux la raison, qui est mentionné ci-dessous.

  1. Nous avons d'abord besoin d'appeler cette méthode dans l'autorisation

Code D'Autorisation

func checkPermission() {
  let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus() switch photoAuthorizationStatus {
    case .authorized: print("Access is granted by user")
    case .notDetermined: PHPhotoLibrary.requestAuthorization({
      (newStatus) in print("status is \(newStatus)") if newStatus == PHAuthorizationStatus.authorized { / do stuff here */ print("success") }
    })
    case .restricted: / print("User do not have access to photo album.")
    case .denied: / print("User has denied the permission.")
  }
}
  1. Manière correcte de l'Appel de méthode de didFinishPickingMediaWithInfo

Faux:

private func imagePickerController( picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
} 

Droit

@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
} 

J'espère que cette solution vous aidera à résoudre cette erreur.

Si cela fonctionne pour vous n'oubliez pas de marque c'est comme une bonne, de sorte que cela va aider les autres à trouver la bonne route.

17voto

Robert Wohnoutka Points 161

Je l'ai trouvé! Il essaie de vous dire que vous n'avez pas l'autorisation de "photos". Vous devez inclure les #import <Photos/Photos.h> et demander une autorisation, par exemple, comme cela dans Objective-C.

J'espère que cela vous fera gagner du temps. J'ai passé deux jours complets à déboguer ça!

 [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
    switch (status) {
        case PHAuthorizationStatusAuthorized:
            NSLog(@"PHAuthorizationStatusAuthorized");
            break;
        case PHAuthorizationStatusDenied:
            NSLog(@"PHAuthorizationStatusDenied");
            break;
        case PHAuthorizationStatusNotDetermined:
            NSLog(@"PHAuthorizationStatusNotDetermined");
            break;
        case PHAuthorizationStatusRestricted:
            NSLog(@"PHAuthorizationStatusRestricted");
            break;
    }
}];
 

Je suis sûr que quelqu'un peut vous dire comment faire la même chose à Swift.

15voto

G Reynolds-Titko Points 141

Essayé un peu de la combinaison des réponses sans beaucoup de succès.

L'utilisation de Swift 4, j'ai trouvé que je devais assurez-vous que les deux éléments suivants ont été mis en œuvre pour s'assurer que l'image a été sélectionné et placé dans le sélecteur (notez que le "[découverte] erreurs rencontrées lors de la découverte des extensions:

Erreur de Domaine=PlugInKit Code=13 de la requête "annulé" UserInfo={NSLocalizedDescription=requête annulée}"

le message s'affiche toujours dans la console, mais cela ne vous empêche pas d'ajout d'une image). C'est peut-être un message que les résultats dans le sélecteur d'être rejeté?

1) Le délégué de l' UIImagePickerController est (UIImagePickerControllerDelegate & UINavigationControllerDelegate)? donc besoin d'ajouter explicitement l' UINavigationControllerDelegate comme l'un des protocoles:

class ViewController:UIViewController, UIImagePickerControllerDelegate, 
    UINavigationControllerDelegate { .... }. 

2) assurez-vous que l'info.plist a l' Privacy - Photo library Usage Description clé et de la Chaîne de valeur de consigne.

Bien sûr, vous devez vous assurer que vous créez un UIImagePickerController et l'ensemble de son délégué égal à self en ViewDidLoad():

class ViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    let imagePickerController = UIImagePickerController()
    override func viewDidLoad() {
        super.viewDidLoad()
        imagePickerController.delegate = self
    }
    ...
}

11voto

logan.Nguyen Points 121

J'ai résolu ce problème, appelez la fonction ci-dessous dans viewdidload ou viewWillAppear ou viewDidAppear pour vérifier les autorisations pour votre application.

 func checkPermission() {
        let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
        switch photoAuthorizationStatus {
        case .authorized:
            print("Access is granted by user")
        case .notDetermined:
            PHPhotoLibrary.requestAuthorization({
                (newStatus) in
                print("status is \(newStatus)")
                if newStatus ==  PHAuthorizationStatus.authorized {
                    /* do stuff here */
                    print("success")
                }
            })
            print("It is not determined until now")
        case .restricted:
            // same same
            print("User do not have access to photo album.")
        case .denied:
            // same same
            print("User has denied the permission.")
        }
    }
 

Et pour utiliser la méthode ci-dessus, n'oubliez pas d'ajouter import Photos en haut de la classe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X