web-dev-qa-db-fra.com

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 première application 2.0 [12873: 1120778] PhotoPicker erreur de découverte: Domaine d'erreur = Code PlugInKit = 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)
    }
}
87
Kreason Naidoo

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)
}
25
Robert Deschrijver

Je l'ai trouvé! Il essaie de vous dire que vous n'avez pas l'autorisation de "photos". Vous devez inclure le #import <Photos/Photos.h> et demander une autorisation, par exemple, 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.

16
Robert Wohnoutka

J'ai trouvé cette solution. Nous avons eu cette erreur en raison de ces deux raisons qui sont mentionnées ci-dessous.

  1. Nous devons d’abord appeler cette méthode pour obtenir une 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. Méthode correcte Appel de didFinishPickingMediaWithInfo 

Faux:

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

Droite

@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 marquer que c'est correct, cela aidera donc les autres à trouver le bon chemin.

14
user3159598

J'ai essayé quelques réponses combinées sans grand succès. 

En utilisant Swift 4, j'ai constaté que je devais m'assurer que les deux éléments suivants étaient implémentés pour que l'image soit sélectionnée et placée dans le sélecteur (notez que les erreurs "[découverte] rencontrées lors de la découverte d'extensions: 

Error Domain = PlugInKit Code = 13 "requête annulée" UserInfo = {NSLocalizedDescription = requête annulée} "

message reste affiché dans la console, mais cela ne vous empêche pas d'ajouter une image). Peut-être est-ce un message qui entraîne le renvoi du sélecteur?

1) Le délégué pour la UIImagePickerController est (UIImagePickerControllerDelegate & UINavigationControllerDelegate)?. Il est donc nécessaire d’ajouter explicitement la UINavigationControllerDelegate en tant que protocole: 

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

2) Assurez-vous que le fichier info.plist a la clé Privacy - Photo library Usage Description et la valeur String définis.

Bien sûr, vous devez vous assurer de créer une UIImagePickerController et de définir son délégué égal à self dans ViewDidLoad()

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

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.

10
logan.Nguyen

Si vous ne l'avez pas encore fait, essayez this .

Produit> Schéma> Modifier le schéma> Variables d'environnement OS_ACTIVITY_MODE: disable

Cela résout mon problème.

10
Changnam Hong

* DELEGATE manquant * dans Swift 3

Dans mon cas, tous les réglages étaient corrects:
1 - Délégués (UIImagePickerControllerDelate, UINavigationControllerDelate);
2 - Autorisations déjà vérifiées;
3 - Plist déjà fait;
4 - Tout ce qui a été lu sur cette réponse, je l’ai fait;

Mais j'ai oublié d'implémenter pickerview.delegate = self sur viewDidLoad Parce que je copie et colle de mon autre viewController et oublie ça!

J'espère que cela aidera quelqu'un, examinez d'abord votre COPIE/PÂTE !!!

6

Ce n'est peut-être pas la réponse la plus directement utile - mais j'espère que cela vous aidera! Je suis sûr à 99% que ce message d'erreur ne vous indique pas réellement le problème. J'ai passé des heures à me tirer les cheveux au-dessus du même problème. 

1) J'avais l'autorisation d'imprimer des photos sur la console lorsque je lancais mon sélecteur, 2) je pouvais naviguer et choisir une photo assez facilement, et 3) lorsque je revenais à ma vue lorsque je rejetais le sélecteur, l'image de mon bouton n’a pas été mis à jour avec la nouvelle photo ... et le seul indice que j’ai eu au problème est le message d’erreur exact que vous recevez.

Il s'avère que je codais en dur une image de paramètre fictif dans ViewWillAppear au lieu de ViewDidLoad. Chaque fois que le sélecteur renvoyait, il appelait ViewWillAppear et remplaçait l'image que je choisissais par mon image codée en dur. J'ai corrigé ce problème et bien sûr - tout fonctionne correctement maintenant ... et je vois toujours ce message d'erreur chaque fois que je reviens du sélecteur.

Je vous recommande de chercher un autre problème que ImagePicker et vous le trouverez probablement.

4
Levi Lais

XCODE 10.1/Swift 4.2:

  1. Ajouter les autorisations requises (autres mentionnées)

  2. Implémentez cette fonction de délégué:

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    
        if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            self.imgView.contentMode = .scaleAspectFit
            self.imgView.image = pickedImage
        }
    
        dismiss(animated: true, completion: nil)
    }
    
4
FRIDDAY

Cela corrige le problème dans Swift 4:

Changer le code ci-dessous

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

pour ça:

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


Swift 4.2 update:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]){}
3
user2153553

J'ai reçu le même message lorsque j'essayais de présenter un autre contrôleur à partir du rappel du sélecteur imagePickerController. La solution qui a fonctionné pour moi était de déplacer mon code dans le rappel d'achèvement à partir de la méthode de renvoi du sélecteur.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        picker.dismiss(animated: true) {
            if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
                let cropController:CropViewController = CropViewController(croppingStyle: .circular, image: pickedImage)
                cropController.delegate = self
                self.present(cropController, animated: true, completion: nil)
            }
        }
    }
3
Mario Vasile

Assurez-vous de sous-classer les deux: UIImagePickerControllerDelegate, UINavigationControllerDelegate.

Aussi, n'oubliez pas de définir le délégué:

let picker = UIImagePickerController()
picker.allowsEditing = true
picker.sourceType = .photoLibrary
picker.delegate = self  //Don't forget this line!
self.present(picker, animated: true, completion: nil)

Crédits à cette source .

3
Ryan G

Cela m'a laissé perplexe, mais la réponse sur le lien ci-dessous a fonctionné pour moi. L'erreur est partie et l'image s'affiche comme prévu

Comme l'une des réponses ci-dessus, vous devez avoir (_ picker... mais aussi @objc avant la fonction.

@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
...
}

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

3
EGibson

Assurez-vous d’ajouter internal func au début, puis la minuscule après la parenthèse (_ picker: UIImagePickerController…, puis passez de AnyObject à Any]
Vérifier le code ci-dessous:

internal func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {

        userPhoto.image = pickedImage

    }

    self.dismiss(animated: true, completion: nil)
}
3
Sabino Diaz

Dans mon cas, cette erreur me causait parce que je présentais un contrôleur de sélecteur d'images sans d'abord vérifier si l'utilisateur avait autorisé l'accès aux images. Ailleurs dans mon code, l'utilisateur avait donné l'autorisation, je pense donc que tout ce que j'avais à faire était d'importer des photos. Cependant, étant donné qu'ils "n'ont peut-être" pas accordé la permission à ce moment-là dans l'application, cela a été ajouté juste avant que je présente le contrôleur de sélection d'images.

// request photos permission if permission has not been granted
    if PHPhotoLibrary.authorizationStatus() != PHAuthorizationStatus.authorized {
        PHPhotoLibrary.requestAuthorization({ (status: PHAuthorizationStatus) in

        })
    }

Si cette réponse semble superflue, je m'excuse, mais je devais rassembler quelques réponses différentes pour que ma solution fonctionne. Cela aidera peut-être quelqu'un d'autre à utiliser Swift 4.

2
Jason Rybka

Corrigé en réglant le délai d'une seconde lors du réglage de l'image.

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

    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {

        picker.dismiss(animated: false, completion: nil)
        DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
            self.discussionImage.image = image
        })
    }
}
2
Dharmesh

C'est ce que j'ai fait et cela a résolu mon problème.

  • ajouter @objc
  • ajouter interne
  • ajouter _ avant imagePicker 
  • assurez-vous que vous utilisez Any et non AnyObject

J'espère que cela t'aides!

2
FreitDev

utiliser ce code

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])
2
jaskiratjd

S'il vous plaît vérifier par étapes comme suit:

  1. Importer des photos
  2. A accès à l'album:

    func authorizeToAlbum(completion:@escaping (Bool)->Void) {
    
    if PHPhotoLibrary.authorizationStatus() != .authorized {
        NSLog("Will request authorization")
        PHPhotoLibrary.requestAuthorization({ (status) in
            if status == .authorized {
                DispatchQueue.main.async(execute: {
                    completion(true)
                })
            } else {
                DispatchQueue.main.async(execute: {
                    completion(false)
                })
            }
        })
    
    } else {
        DispatchQueue.main.async(execute: {
            completion(true)
        })
    }
    }
    
  3. UIImagePickerController actuel

    self.authorizeToAlbum { (authorized) in
        if authorized == true {
            let picker = UIImagePickerController()
            picker.delegate = self
            picker.allowsEditing = false
            picker.sourceType = .photoLibrary
    
            self.present(picker, animated: true, completion: nil)
        }
    }
    
  4. L'étape clé, assurez-vous que la méthode déléguée est comme suit strictement

    // MARK: - UIImagePickerControllerDelegate Methods
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
        self.pickedImage = pickedImage
        if let finalImage = handleImage(originalImage: self.pickedImage!, maskImage: self.maskImage!) {
            self.imageView.image = finalImage
        }
    }
    
    dismiss(animated: true, completion: nil)
    }
    
2
xuzepei

Cela a résolu mon erreur: 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
    addPhotoBtn.setImage(pickedImage, for: .normal)
    dismiss(animated: true, completion: nil)


}

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

}
2
iOS Developer

Trouver la solution à ce problème m'a pris pour toujours. Il semble que le problème est que la fonction imagePickerController de UIImagePickerControllerDelegate est introuvable. Si vous avez défini le délégué correctement et qu'il a cessé de fonctionner après la mise à niveau vers Swift 4, le problème est probablement que vous ne l'avez pas rendu accessible à Objective-C en utilisant @objc, requis depuis Swift 4.

Ce doit être:

@objc func imagePickerController (...

au lieu de 

func imagePickerController(...
2
Apfelsaft

Cette erreur "Error Domain = PlugInKit Code = 13" a semé la confusion dans l'esprit de beaucoup de gens, même s'il semble s'agir d'un message de débogage inoffensif Apple. J'avais du mal à obtenir l'image que j'avais choisi de définir dans mon interface utilisateur et je pensais que cette erreur était le problème, mais que c'était quelque chose d'un peu plus subtil.

J'ai mon contrôleur de sélecteur d'images dans un fichier séparé du contrôleur de vue qui le présente.

MyViewController.Swift

class MyViewController: UIViewController {
    @IBOutlet weak var profileImage: UIImageView!

    ...
}

extension MyViewController: ImagePickerDelegate {
    func didSelect(image: UIImage?) {
        self.profileImage.image = image
    }
}

ImagePicker.Swift

open class ImagePicker: NSObject {
    ...
    private func pickerController(_ controller: UIImagePickerController, didSelect image: UIImage?) {
        controller.dismiss(animated: true, completion: {self.delegate?.didSelect(image: image)}
        )
    }
}

La plupart des didacticiels et des réponses ont la fin d'exécution définie sur nil. Toutefois, si vous définissez la complétion sur nil et appelez la méthode didSelect du délégué séparément, la méthode sera appelée mais l'image ne sera pas définie. Assurez-vous donc de bien utiliser la complétion de la commande 'ignore'.

Et encore une fois, je sais que cette réponse n’est peut-être pas directement liée à la question initiale, mais j’ai le sentiment que beaucoup de gens viennent ici pour cette question et que les solutions proposées n’aident pas. La raison en est que la plupart des personnes qui donnent des réponses ont leur contrôleur de sélecteur d’images dans la même classe que leur contrôleur de vue principal et n’ont donc pas besoin d’utiliser un achèvement.

1
Braden Holt

L'erreur se produit également lorsque vous n'avez pas configuré les autorisations d'utilisation de la photothèque dans votre fichier Info.plist.

Vous devez ajouter Privacy - Photo Library Usage Description dans le Info.plist avec un String qui apparaîtra lorsque votre application tentera pour la première fois d'accéder à la bibliothèque de photos de l'utilisateur.

Les derniers ajustements Info.plist devraient ressembler à ceci:  enter image description here

1
Knowledge

De mon côté, UINavigationControllerDelegate délégué est manquant.

class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate

1
Aleem

J'ai la même erreur et je l'ai corrigé de cette façon:

obtenir un objet image de manière différente dépend de UIImagePickerController de permettre l’édition est vrai ou faux

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

    if isImagePickerAllowEditing {
        sourceImage = info[UIImagePickerControllerEditedImage] as? UIImage
    } else {
        sourceImage = info[UIImagePickerControllerOriginalImage] as? UIImage
    }

    ....

}

Et bien sûr, demandez la permission d'accéder d'abord à la photothèque en tant que commentaires ci-dessus.

1
melson.jao

Swift 5 et ci-dessus:

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
    }



func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        guard let image = info[.editedImage] as? UIImage else { return }
        dismiss(animated: true)
        chosenImage = image
        **pic.image = chosenImage**

    }

    @IBAction func tap(_ sender: Any) {
        self.text.text = "Kreason"
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        //imagePicker.dataSource = self
        imagePicker.allowsEditing = false
        self.present(imagePicker, animated: true)

    }
}
0
Xab Ion

j'ai trouvé la solution de IMage PickerView .....

@IBOutlet weak var myImageView: UIImageView!

var imagePicker = UIImagePickerController()


  @IBAction func selectImage(_ sender: Any) {

        let myPickerController = UIImagePickerController()
        myPickerController.delegate = self;
        myPickerController.sourceType = UIImagePickerControllerSourceType.photoLibrary

        self.present(myPickerController, animated: true, completion: nil)

    }

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

        var selectedImageFromPicker: UIImage?

        if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage
        {
            selectedImageFromPicker = editedImage as! UIImage


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

            selectedImageFromPicker = originalImage as! UIImage


        }

        dismiss(animated: true, completion: nil)

        if var selectedImage = selectedImageFromPicker
        {
            myImageView.image = selectedImage
        }

    }

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

Utilisez didFinishPickingMediaWithInfo

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

        uploadImage(chosenImage)
}
0
Martin De Simone

Je suis tombé sur le même problème. Aucune des suggestions mentionnées ci-dessus n'a fonctionné pour moi. Cependant, je l'ai résolu, en appelant explicitement le picker.dismiss et en le renvoyant. Je ne comprends pas pourquoi j'ai fait des appels comme ça, mais cela a fonctionné pour moi.

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

        print("Image picked")
        picker.dismiss(animated: true, completion: nil)
        dismiss(animated: true) {
            print("dismissed")
             self.delegate?.presentEditor(img: (info[UIImagePickerControllerOriginalImage] as? UIImage)!, id: self.id!)
    }

}
0
Vyshakh

Dans mon cas en tant que Swift, la gestion de la mémoire d'allocation semble être optimisée et corrigée par Apple Team. Mon code fonctionnait parfaitement jusqu’à la mise à jour Swift et j’ai constaté que mon "erreur" était de ne pas conserver le sélecteur, mais cela fonctionnait depuis des lustres sans la rétention. Voici donc une solution prête à fonctionner.

// Add Privacy - Photo Library Usage Description to your info.plist
<key>NSPhotoLibraryUsageDescription</key>
<string>APPNAME need to access your pictures to violate your privacy :P</string>

Et

import Photos    
class MyImageSelector: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {

    var picker = UIImagePickerController() 
    // Make sure to retain this picker var until the picker returned

    func checkPermission() {
        let call = self.presentAuthorized

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

    }

    func showPicker() {
        picker = UIImagePickerController()
        picker.allowsEditing = true
        picker.sourceType = .photoLibrary
        picker.delegate = self  //Don't forget this line!
        self.present(picker, animated: true, completion: nil)
    }

    @objc public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        // DO something with picture
    }

    @objc public func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        // User cancelled the pick
    }
}
0
Benpaper

cliquez sur imageView pour charger l'image de la photothèque et afficher l'aperçu sur la même imageview. sur Swift 4

 let imagePicker = UIImagePickerController()
        @IBOutlet weak var userImage: UIImageView! 

     override func viewDidLoad() {
                super.viewDidLoad()
                 imagePicker.delegate = self
                let tap = UITapGestureRecognizer(target: self, action: #selector(SignUpViewController.click))
                userImage.addGestureRecognizer(tap)
                userImage.isUserInteractionEnabled = true
            }

            @objc func click()
            {
                imagePicker.allowsEditing = false
                imagePicker.sourceType = .photoLibrary
                present(imagePicker, animated: true, completion: nil)
            }


            @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
                if  let chosenImage = info[UIImagePickerControllerOriginalImage] as? UIImage{
                userImage.contentMode = .scaleAspectFit
                userImage.image = chosenImage
                }
                dismiss(animated: true, completion: nil)
            }

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

J'ai lu toutes ces réponses et un peu modifié ici et pas besoin de rejeter, cela a fonctionné pour moi, Merci d'autres qui ont répondu ici.

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

      print("########### media picked")
      picker.dismiss(animated: true, completion: nil)
      let img = (info[UIImagePickerControllerOriginalImage] as? UIImage)!
      //set img -picked image to "profileImage" UIimageView
      //use image here
       self.profileImage.image = img
       }
    }

Essayez de ne pas utiliser la méthode UIImagePickerController à l’intérieur de la méthode, mais de la transformer en variable de classe et de ne la créer qu’une fois.

J'ai eu le même problème que vous quand j'ai oublié de définir un délégué pour UIImagePickerController

0
zvjerka24

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_MODE et Valeur disable
0
Marcos Reboucas