web-dev-qa-db-fra.com

Message d'erreur du sélecteur à la sortie (rencontré lors de la découverte d'extensions: domaine d'erreur = code PlugInKit = 13) avec Swift 4 - Xcode 9

Semblable à 

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

et aussi à 

https://forums.developer.Apple.com/thread/82105

MAIS j'ai essayé toutes ces suggestions et j'obtiens toujours une erreur dans le journal de débogage. Exécution de Swift 4 XCode 9A235

Ce qui a été suggéré aux différents endroits était ...

  • certaines personnes ont dit ajouter @objc
  • certaines personnes ont dit d'ajouter interne
  • certaines personnes ont suggéré d’ajouter _ et de s’assurer d’utiliser Any et non AnyObject
  • certaines personnes ont dit d'utiliser didFinishPickingImageWithInfo (this returnsno image for me)
  • certaines personnes ont déclaré démanteler le préparateur, d'autres ont dit se renvoyer, d'autres.
  • certains ont dit d'ajouter le 'Privacy ...' au plist (fait)
  • importation ajoutée Photos
  • appel précédent ajouté pour forcer PHPhotoLibrary.requestAuthorization () { (status) -> Void dans ...

DID Je ne reçois pas ce problème dans Swift 3 - xcode précédent . Mais avec Swift 4, j’ai essayé tout ce que j’ai vu suggéré et j’obtiens toujours l’erreur suivante.

[découverte] erreurs rencontrées lors de la découverte d'extensions: Domaine d'erreur = Code PlugInKit = 13 "requête annulée" UserInfo = {NSLocalizedDescription = requête annulée}

Le sélecteur fonctionne correctement et je sélectionne une image à partir de photos, mais je reçois ce message d'erreur à la sortie du sélecteur (annuler ou sélectionner), à chaque fois ... 

Des suggestions pour arrêter le message d'erreur? Autre que la liste des éléments proposés aux deux autres liens (résumés ci-dessus)

ma méthode

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

    imageSelected = nil

    if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
        imageSelected = editedImage
    } else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {
        imageSelected = originalImage
    }

    if  imageSelected != nil {
        handleSelectedImage()   // override in subclass to do something with the returned image
    }
    picker.dismiss(animated: true, completion: nil)   // mess of calling both dismiss to see if it helps - it does not
    dismiss(animated: true, completion: nil)
}
19
john
  1. ajouter le 'Privacy ...' au plist
  2. Depuis le menu Xcode ouvert: Produit> Schéma> Modifier le schéma> Sur vos variables d'environnement, définissez OS_ACTIVITY_MODE dans la valeur définie, désactivez-la.

voir dans mc-system-group-container-and-mc-reading-from-public-effect-user-settings-err

Le travail est bien pour moi

MODIFIER

si cela peut aider ci-dessous mon code (travailler avec xcode 9)

if libraryAuthorization == .authorized {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
        imagePicker.allowsEditing = false
        imagePicker.view.tag = button.tag
        self.present(imagePicker, animated: true, completion: nil)
    }
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let pickerImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
        photoContainer.addImageToButton(pickerImage, buttonTag: picker.view.tag)
        dismiss(animated: true)
    }
}
15
Antoine Richeux

J'avais le même problème et j'essayais toutes les solutions que je pouvais trouver, mais rien n'y faisait. Je me suis juste demandé ce qui pouvait arriver au délégué de ne pas être déclenché: désallocation du délégué!

Et c'était ça dans mon cas! Lors de la présentation de UIImagePickerController, mon instance de class ImagePickerController : NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate, Qui n'est pas le contrôleur de présentation, est désallouée directement. Bien sûr, les fonctions de délégué ne peuvent plus être exécutées.

Il suffit de mettre un point d'arrêt dans deinit (ou dealloc dans le monde Objective-C) et de voir si votre délégué est en cours de désallocation.

2
Kai

L'utilisateur demande: "* Des suggestions sur la manière d'arrêter le message d'erreur? Autre que la liste des éléments proposés sur les deux autres liens (récapitulés ci-dessus)".

J'ai utilisé deux étapes pour éliminer le message d'erreur . Félicitations à la personne située au-dessus de Antoine Richeux https://stackoverflow.com/users/5767821/antoine-richeux .
Je pense que l’ajout de Privacy à pList n’est peut-être pas nécessaire, du moins dans mon cas

STEP 1.Dans la barre de menus, sélectionnez: Produit> Schéma> Modifier le schéma> Sélectionnez Exécuter dans la liste de gauche de Build, Run ... ArchiveSelect Arguments. en haut à droite des sélections - voir l'image ci-jointe .. Utilisez le bouton + sous Variables d'environnement pour ajouter une nouvelle entréeNom: OS_ACTIVITY_MODE Valeur: désactiver

Ceci montre où ajouter la variable d'environnement

STEP 2. Nettoyer le projet et reconstruire

2
user6216481

Pouvez-vous l'essayer?

extension YourProfileViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {

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

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        log.debug("Called imagePickerController function ")
        let image = info[UIImagePickerControllerOriginalImage] as? UIImage
        self.dismiss(animated: true) {
            self.yourProfileImageView.image = image
        }
    }
}
1
elia

En effet, votre application utilise une bibliothèque de photos (dans ce cas, en utilisant UIImagePickerController) sans demander la permission de l'utilisateur. Par exemple, si je veux afficher le sélecteur d'images lorsque le bouton Ajouter a été activé: 

@IBAction func addButtonTapped(_ sender: UIBarButtonItem) {
    checkPermission {
        let picker = UIImagePickerController()
        picker.sourceType = .photoLibrary
        picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)!

        picker.delegate = self
        picker.allowsEditing = false
        self.present(picker, animated: true, completion: nil)
    }
}

func checkPermission(hanler: @escaping () -> Void) {
    let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
    switch photoAuthorizationStatus {
    case .authorized:
        // Access is already granted by user
        hanler()
    case .notDetermined:
        PHPhotoLibrary.requestAuthorization { (newStatus) in
            if newStatus == PHAuthorizationStatus.authorized {
                // Access is granted by user
                hanler()
            }
        }
    default:
        print("Error: no access to photo album.")
    }
}

En outre, vous devez également ajouter ceci à votre plist:

<key>NSPhotoLibraryUsageDescription</key>
<string>So that you can add images for your cloth. </string>

qui est le message affiché dans la boîte de dialogue d'autorisation. 

1
Yuchen Zhong

J'ai aussi eu ce problème. C'est très gênant parce que l'erreur de la console survient mais l'application continue de charger l'image. J'ai demandé le statut d'autorisation, ajouté mes clés au fichier .plst, mais je n'ai rien trouvé pour faire le travail. 

Une fois que je suis allé dans Produit -> Schéma -> Éditer le schéma -> Exécuter puis clé ajoutée: " OS_ACTIVITY_MODE " valeur: " disable ", nettoyé et reconstruit ... l'erreur disparut . 

1
Richard Poutier

Pour Swift 4:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    guard let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else {
        return
    }
    ...
}
  • Sur le paramètre de méthode, passez de [String: Any] à [UIImagePickerController.InfoKey : Any]
  • Sur l'image sélectionnée, passez de info["UIImagePickerControllerOriginalImage"] à info[UIImagePickerController.InfoKey.originalImage]
1
Andre Racco

Avait ce même problème sur Swift 4.2 et Xcode 10.0 . Bien que le sélecteur d'images fonctionne correctement, Xcode a affiché cette erreur sur la console. Pour se débarrasser de cela:

  • Dans le menu Xcode, Produit> Schéma> Editer un schéma
  • Sélectionnez l'onglet "Exécuter", puis "Arguments"
  • Dans la section 'Variables d'environnement', ajoutez une variable avec Nom OS_ACTIVITY_MOD E et Value disable
0
Marcos Reboucas

Assurez-vous de déclarer que votre classe implémente UINavigationControllerDelegate.

extension MyViewController: UINavigationControllerDelegate {}

Pour une raison quelconque dans Xcode 9.0, il m'a averti de déclarer le délégué en tant que tel:

imagePicker.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate
0
user339946