Errore di rilevamento di PhotoPicker: Error Domain = PlugInKit Code = 13


118

Sto cercando di visualizzare un'immagine dalla libreria di foto in un UIImageView

L'errore completo è:

2017-06-09 21: 55: 59.063307 + 0200 firstapp2.0 [12873: 1120778] Errore di rilevamento PhotoPicker: errore Domain = PlugInKit Code = 13 "query cancellata" UserInfo = {NSLocalizedDescription = query cancellata}

Il mio codice è incluso di seguito:

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)
    }
}

11
Ho ricevuto lo stesso errore. stai usando Xcode 9 beta, iOS 11?
Giovanni

4
Questo funzionava ... e poi iOS 11 Beta 4 mi ha dato questo errore all'improvviso. Così strano.
user2153553

2
Ricevo lo stesso errore e la mia implementazione è in obj-c. Questo messaggio di errore non può essere correlato al casting del tipo del dizionario delle informazioni restituito nel metodo delegato UIImagePicker in object-c: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)infoi valori del dizionario vengono sottoposti a cast come id in obj-c. Ho anche implementato la richiesta di autorizzazione e la gestione per l'accesso alla libreria di foto dell'utente: ricevo ancora il messaggio di errore. Ho aggiunto nel file info.plist la voce relativa alla privacy per l'utilizzo della libreria di foto dell'utente.
valeCocoa

2
Ricevo un bug corrente ma non mi impedisce di ottenere l'immagine dalla libreria e di usarla in seguito ..
shokuroff

3
Ho provato tutti i suggerimenti in tutte le risposte combinate, senza alcun risultato.
Nicolas Miari

Risposte:


39

È necessario fare riferimento esplicito a 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)
}

6
Per me va bene. Di recente avevo aggiornato a Swift 4 e Xcode 9 e questo lo ha risolto.
user3144836

3
Per me va bene. Richiesto dopo la migrazione a Swift 4.0.
mayankk2308

4
Non funziona Questo errore si è verificato dopo che ho chiamato dismiss.
Kimi Chiu

Strano. Questo ha funzionato per me, tuttavia xcode lo contrassegna come un avviso e si aspetta una firma di: `Instance method 'imagePickerController ( : didFinishPickingMediaWithInfo :)' quasi corrisponde al requisito facoltativo 'imagePickerController ( : didFinishPickingMediaWithInfo :)' del protocollo 'UIImagePickerControllerDelegate' Make 'imagePicker' Make 'imagePicker : didFinishPickingMediaWithInfo :) 'privato per silenziare questo avvertimento'
Dark Castle

@DarkCastle devi scrivere la funzione in un extension [your class name]blocco, al di fuori della classe.
Prometheos II

18

Ho trovato questa soluzione. Abbiamo ricevuto questo errore a causa di questi due motivi menzionati di seguito.

  1. Per prima cosa dobbiamo chiamare questo metodo per l'autorizzazione

codice di autorizzazione

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. Metodo corretto Calling of didFinishPickingMediaWithInfo

Sbagliato:

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

Destra

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

Spero che questa soluzione ti aiuti a risolvere questo errore.

Se funziona per te, non dimenticare di contrassegnarlo come corretto, quindi questo aiuterà gli altri a trovare il modo corretto.


Noob PSA: PHPhotoLibrary proviene dal modulo Foto di Swift
Braden Holt,

Non funziona L'errore si verifica dopo che chiamopicker.dismiss(animated: true, completion: nil)
ForceBru

17

L'ho trovato! Sta cercando di dirti che non hai l'autorizzazione per le "foto" Devi includere #import <Photos/Photos.h>e richiedere l'autorizzazione, ad esempio in questo modo, in Objective-C.

Spero che questo ti farà risparmiare tempo. Ho passato due giorni interi a eseguire il debug di questo!

[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;
    }
}];

Sono sicuro che qualcuno può dirti come fare lo stesso in Swift.


1
assicurati di includere #import <Photos / Photos.h>
Robert Wohnoutka,

6
Questo non ha risolto il mio problema.
fi12

1
Ricevo il seguente messaggio nella console "Lettura dalle impostazioni utente effettive private. Errori rilevati durante la scoperta delle estensioni: Error Domain = PlugInKit Code = 13" query cancellata "UserInfo = {NSLocalizedDescription = query cancellata}". Non ha risolto il problema.
Biranchi

15

Ho provato alcune delle risposte combinate senza molto successo.

Utilizzando Swift 4, ho scoperto che dovevo assicurarmi che i seguenti due elementi fossero implementati per assicurarmi che l'immagine fosse selezionata e inserita nel selettore (nota che gli "errori [discovery] rilevati durante la scoperta delle estensioni:

Error Domain = PlugInKit Code = 13 "query cancellata" UserInfo = {NSLocalizedDescription = query cancellata} "

il messaggio viene ancora visualizzato nella console, ma non impedisce di aggiungere un'immagine). Forse questo è un messaggio che fa sì che il selettore venga ignorato?

1) Il delegato per il UIImagePickerControllerè (UIImagePickerControllerDelegate & UINavigationControllerDelegate)?quindi necessario aggiungere esplicitamente il UINavigationControllerDelegatecome uno dei protocolli:

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

2) Assicurati che info.plist abbia la Privacy - Photo library Usage Descriptionchiave e il valore String impostati.

Ovviamente, devi assicurarti di creare UIImagePickerControllere impostare il suo delegato uguale a selfin ViewDidLoad():

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

4
Ho tutto questo nel mio progetto .. ancora non funziona
Mohamed Lee

Grazie, mi sono perso l'impostazione del delegato in viewDidLoad ()
Arshad Shaik,

11

Ho risolto questo problema, chiama la funzione di seguito in viewdidload o viewWillAppear o viewDidAppear per verificare l'autorizzazione per la tua app.

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.")
        }
    }

E per utilizzare il metodo sopra, non dimenticare di aggiungere import Photos all'inizio della classe.


11

XCODE 10.1 / SWIFT 4.2:

  1. Aggiungi le autorizzazioni richieste (altri menzionati)

  2. Implementa questa funzione delegato:

    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)
    }

1
Vero modo di usare la funzione imagePickerController su Swift 4x
Samet Sazak

10

* DELEGATE mancante * in Swift 3

Nel mio caso, tutte le impostazioni erano corrette:
1 - Delegates (UIImagePickerControllerDelegate, UINavigationControllerDelegate);
2 - Autorizzazioni già verificate;
3 - Plist già fatto;
4 - Tutto quello che ho letto su questa Risposte, l'ho fatto;

Ma ho dimenticato di implementare pickerview.delegate = selfsu viewDidLoad Perché copio e incolla dal mio altro viewController e lo dimentico!

Spero che aiuti qualcuno, rivedi prima la tua COPIA / INCOLLA !!!


Grazie, sto lottando per lunghe ore e ho perso "UINavigationControllerDelegate", finalmente hai salvato, grazie
Sakthimuthiah

Felice di aiutare :)
Daniel Arantes Loverde

8

Questa potrebbe non essere la risposta più direttamente utile, ma si spera che possa aiutare! Sono sicuro al 99% che questo particolare messaggio di errore non ti stia effettivamente indicando il vero problema. Ho passato ore a strapparmi i capelli per lo stesso identico problema.

1) Avevo l'autorizzazione per la stampa di foto sulla console quando ho avviato il selettore, 2) Potevo navigare e scegliere una foto abbastanza facilmente e 3) quando tornavo alla mia visualizzazione dopo aver chiuso il selettore, l'immagine del mio pulsante non è stato aggiornato con la nuova foto ... e l'unico suggerimento che ho avuto al problema è stato lo stesso identico messaggio di errore che stai ricevendo.

È venuto fuori che stavo codificando un'immagine segnaposto in ViewWillAppear invece di ViewDidLoad. Ogni volta che il selettore stava chiudendo, chiamava ViewWillAppear e sostituiva la mia immagine scelta con la mia immagine hardcoded. Ho risolto il problema e abbastanza sicuro: tutto funziona bene ora ... e vedo ancora quel messaggio di errore ogni volta che torno dal selettore.

Consiglio di cercare da qualche parte diverso da ImagePicker per il tuo problema e probabilmente lo troverai.


7

Se non l'hai fatto, prova questo .

Prodotto> Schema> Modifica schema> Variabili d'ambiente OS_ACTIVITY_MODE: disable

Risolve il mio problema.


23
Ciò sopprime i messaggi di errore ma non risolve la loro causa. Sopprime anche altri messaggi di sistema e qualsiasi cosa da NSLog.
John Montgomery

6
Questo non "risolve" il problema, lo rende solo invisibile. Pratica pessima.
zeeshan

Questo è l'equivalente di nascondere il proprio sporco sotto il tappeto TBH
shiv

7

Questo risolve il problema in Swift 4:

Cambia il codice qui sotto

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

a questa:

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


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

Il mio errore era qualcosa del genere: errori riscontrati durante la scoperta delle estensioni: Error Domain = PlugInKit Code = 13 "query cancellata" UserInfo = {NSLocalizedDescription = query cancellata} E questo ha risolto il mio problema, anche se non posso parlare con se questo aiuta l'OP . Grazie :)
agrippa

6

Ho ricevuto lo stesso messaggio quando stavo cercando di presentare un altro controller dalla richiamata del selettore imagePickerController. La soluzione che ha funzionato per me è stata spostare il mio codice all'interno del callback di completamento dal metodo di eliminazione del selettore

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)
            }
        }
    }

Ottima risposta, mi hai risparmiato tempo 👍🏼
Coder ACJHP

Ha funzionato meravigliosamente! Pensa che questo sia il modo corretto per gestire gli errori di selezione in Swift 4.x.
shiv

4

Assicurati di creare sottoclassi entrambi: UIImagePickerControllerDelegate, UINavigationControllerDelegate .

Inoltre, ricorda di impostare il delegato:

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

Crediti a questa fonte .


picker.delegate = self - era il mio caso! Grazie.
Alexey Chekanov

4

Trovare la soluzione per questo problema mi ha richiesto un'eternità. Sembra che il problema sia che la funzione imagePickerController di UIImagePickerControllerDelegate non può essere trovata. Se hai impostato correttamente il delegato e ha smesso di funzionare dopo l'aggiornamento a Swift 4, probabilmente il problema è che non l'hai reso accessibile a Objective-C utilizzando @objc, richiesto da Swift 4.

Deve essere:

@objc func imagePickerController (...

invece di

func imagePickerController(...

Crea erroreObjective-C method 'imagePickerController:didFinishPickingMediaWithInfo:' provided by method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' conflicts with optional requirement method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' in protocol 'UIImagePickerControllerDelegate'
Nico Neill

Esatto, questo è il modo per risolverlo!
Maria Ortega

@NicoNeill hai aggiunto la funzione in un extensionblocco?
Prometheos II,

4

Risolto il problema impostando un ritardo di 1 secondo durante l'impostazione dell'immagine.

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
        })
    }
}

3

Assicurati di aggiungere internal funcall'inizio e poi aggiungi la minuscola dopo le parentesi ( _ picker: UIImagePickerController…e poi cambia da AnyObjecta Any] ...
Controlla il codice qui sotto:

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

Questo mi ha lasciato perplesso, ma la risposta al link sottostante ha funzionato per me. L'errore è scomparso e l'immagine viene visualizzata come previsto

Come una delle risposte sopra, devi avere (_ picker...ma anche @objcprima della funzione.

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

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


2

Questo ha risolto il mio errore:

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

Si prega di controllare i passaggi come segue:

  1. Importa foto
  2. Ha accesso all'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. Presente UIImagePickerController

    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. Il passaggio chiave, assicurarsi che il metodo delegato sia come seguire rigorosamente

    // 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

Questo è quello che ho fatto e ha risolto il mio problema.

  • aggiungi @objc
  • aggiungi interno
  • aggiungi _ prima di imagePicker
  • assicurati di utilizzare Any e non AnyObject

Spero che questo ti aiuti!


Hmm, internalè l'impostazione predefinita; Chissà che differenza fa specificarlo ...
Nicolas Miari il

2

Nel mio caso ho ricevuto questo errore perché stavo presentando un controller di selezione di immagini senza prima verificare se l'utente aveva consentito l'accesso alle immagini. In altre parti del mio codice l'utente aveva concesso l'autorizzazione, quindi penso che tutto ciò che dovevo fare fosse importare le foto. Tuttavia, dal momento che "potrebbero" non aver concesso l'autorizzazione a quel punto nell'app, l'aggiunta di questo appena prima di presentare il controller di selezione delle immagini ha risolto il problema per me (importa anche le foto).

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

        })
    }

Se questa risposta sembra ridondante, le mie scuse ma ho dovuto mettere insieme alcune risposte diverse per far funzionare la mia soluzione. Forse questo aiuterà qualcun altro a usare Swift 4.


2

usa questo codice

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

2

Questo errore "Error Domain = PlugInKit Code = 13" ha confuso molte persone anche se sembra essere un innocuo messaggio di debug di Apple. Ho avuto problemi a ottenere l'immagine che ho scelto di impostare nella mia interfaccia utente e ho pensato che l'errore fosse il problema, tuttavia era qualcosa di un po 'più sottile.

Ho il mio controller di selezione delle immagini in un file separato dal controller di visualizzazione che lo presenta.

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 maggior parte dei tutorial e delle risposte hanno il completamento impostato su zero. Tuttavia, se si imposta il completamento su nil e si chiama separatamente il metodo didSelect del delegato, il metodo viene chiamato ma l'immagine non viene impostata, quindi assicurarsi di utilizzare il completamento di dismiss.

E ancora, so che questa risposta potrebbe non essere direttamente correlata alla domanda originale, ma ho la sensazione che molte persone vengano qui per questo problema e le soluzioni fornite non siano d'aiuto. Il motivo è che la maggior parte delle persone che danno le risposte ha il controller di selezione delle immagini nella stessa classe del controller di visualizzazione principale e quindi non è necessario utilizzare un completamento.


Questo è esattamente ciò di cui avevo bisogno. Grazie!
AJ Hernandez

1

L'errore si verifica anche quando non hai configurato le autorizzazioni di utilizzo della Libreria foto in teInfo.plist file.

È necessario aggiungere Privacy - Photo Library Usage Descriptionin Info.plistuna stringa che apparirà quando la tua App tenterà per la prima volta di accedere alla Libreria Foto dell'Utente.

Le Info.plistmodifiche finali dovrebbero assomigliare a questo: inserisci qui la descrizione dell'immagine


1

Ho lo stesso errore e l'ho corretto in questo modo:

ottenere l'oggetto immagine in modo diverso dipende da UIImagePickerController allowEditing è vero o falso

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

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

    ....

}

E, naturalmente, chiedi prima il permesso di accedere alla libreria di foto come commenti sopra.


1

Da parte mia UINavigationControllerDelegatemanca il delegato.

class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate


0

Mi sono imbattuto nello stesso problema. Nessuno dei suggerimenti sopra menzionati ha funzionato per me. Tuttavia, l'ho risolto, chiamando esplicitamente il picker.dismiss e respingendo il post. Non mi è chiaro il motivo per cui ho effettuato chiamate in questo modo, ma ha funzionato per me.

   @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

Ho letto tutte queste risposte e sono state modificate un po 'qui e non ho bisogno di ignorarle, questo ha funzionato per me, grazie ad altri che hanno risposto qui.

    @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
       }
    }

0

ho trovato la soluzione di 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

fare clic su imageView per caricare l'immagine dalla libreria di foto e mostrare l'anteprima sulla stessa immagine. su 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

Ho riscontrato lo stesso problema su Swift 4.2 e Xcode 10.0 . Sebbene il selettore di immagini funzionasse correttamente, Xcode ha mostrato questo errore sulla console. Per sbarazzarsi di questo:

  • Nel menu Xcode Prodotto> Schema> Modifica schema
  • Seleziona la scheda "Esegui", quindi "Argomenti"
  • Nella sezione "Variabili d'ambiente" aggiungi una variabile con Nome OS_ACTIVITY_MODE e Valore disabilitato

Beh ... non proprio ... per me mostra questo errore ma il metodo didFinishPickingMediaWithInfo non è chiamato ... quindi dovevo abilitare questo valore per vedere questo errore
Mohamed Lee
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.