Error de descubrimiento de PhotoPicker: Dominio de error = Código PlugInKit = 13

118

Estoy tratando de mostrar una imagen de la biblioteca de fotos en un UIImageView

El error completo es:

2017-06-09 21: 55: 59.063307 + 0200 firstapp2.0 [12873: 1120778] Error de descubrimiento de PhotoPicker: Error Domain = PlugInKit Code = 13 "consulta cancelada" UserInfo = {NSLocalizedDescription = consulta cancelada}

Mi código se incluye a continuación:

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)
    }
}
Kreason Naidoo
fuente
11
Tengo el mismo error. ¿Estás usando Xcode 9 beta, iOS 11?
John
4
Esto solía funcionar ... y luego iOS 11 Beta 4 me dio este error de repente. Tan raro.
user2153553
2
Recibo el mismo error y mi implementación está en obj-c. Este mensaje de error no puede estar relacionado con el tipo de conversión del diccionario de información devuelto en el método delegado UIImagePicker en el objetivo-c: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)infolos valores del diccionario se convierten como id en obj-c. También implementé la solicitud de autorización y el manejo para acceder a la biblioteca de fotos del usuario: todavía recibo el mensaje de error. Agregué en el archivo info.plist la entrada de privacidad para el uso de la biblioteca de fotos del usuario.
valeCocoa
2
Recibo un error actual, sin embargo, no me impide obtener la imagen de la biblioteca y usarla más tarde ..
shokuroff
3
Probé todas las sugerencias en todas las respuestas combinadas, sin éxito.
Nicolas Miari

Respuestas:

39

Debe hacer una referencia explícita 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)
}
Robert Deschrijver
fuente
6
Funciona para mi. Recientemente actualicé a Swift 4 y Xcode 9 y esto lo resolvió.
user3144836
3
Funciona para mi. Obligatorio después de migrar a Swift 4.0.
mayankk2308
4
No funciona. Este error ocurrió después de que llamé dismiss.
Kimi Chiu
Extraño. Esto funcionó para mí, sin embargo, xcode lo marca como una advertencia y espera una firma de: `Método de instancia 'imagePickerController ( : didFinishPickingMediaWithInfo :)' casi coincide con el requisito opcional 'imagePickerController ( : didFinishPickingMediaWithInfo :)' del protocolo 'UIImagePickerController _Delegate' Make 'imagePickerController ( : didFinishPickingMediaWithInfo :) 'privado para silenciar esta advertencia'
Dark Castle
@DarkCastle necesitas escribir la función en un extension [your class name]bloque, fuera de la clase.
Prometheos II
18

Encontré esta solución. Recibimos este error debido a estas dos razones que se mencionan a continuación.

  1. Primero necesitamos llamar a este método para autorización

Código de Autorización

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. Forma correcta de método Llamada de didFinishPickingMediaWithInfo

Incorrecto:

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

Correcto

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

Espero que esta solución le ayude a resolver este error.

Si funciona para usted, no olvide marcarlo como correcto, así que esto ayudará a otros a encontrar el camino correcto.

usuario3159598
fuente
Noob PSA: PHPhotoLibrary es del módulo Fotos de Swift
Braden Holt
No funciona. El error ocurre después de que llamopicker.dismiss(animated: true, completion: nil)
ForceBru
17

¡Lo encontré! Está tratando de decirle que no tiene autorización para "fotos". Debe incluir #import <Photos/Photos.h>y solicitar autorización, por ejemplo, como esta en Objective-C.

Espero que esto te ahorre algo de tiempo. ¡Pasé dos días completos depurando esto!

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

Estoy seguro de que alguien puede decirte cómo hacer lo mismo en Swift.

Robert Wohnoutka
fuente
1
asegúrese de incluir #import <Photos / Photos.h>
Robert Wohnoutka
6
Esto no solucionó mi problema.
fi12
1
Recibo el siguiente mensaje en la consola "Lectura de la configuración de usuario efectiva privada. Errores encontrados al descubrir extensiones: Error Domain = PlugInKit Code = 13" consulta cancelada "UserInfo = {NSLocalizedDescription = consulta cancelada}". No resolvió el problema.
Biranchi
15

Probé algunas de las respuestas combinadas sin mucho éxito.

Al usar Swift 4, descubrí que necesitaba asegurarme de que se implementaran los dos elementos siguientes para garantizar que la imagen se seleccionara y se colocara en el selector (tenga en cuenta que los "errores [de descubrimiento] encontrados al descubrir extensiones:

Error de dominio = Código de PlugInKit = 13 "consulta cancelada" UserInfo = {NSLocalizedDescription = consulta cancelada} "

El mensaje aún se muestra en la consola, pero no le impide agregar una imagen). ¿Quizás este es un mensaje que hace que el selector sea descartado?

1) El delegado de UIImagePickerControlleres (UIImagePickerControllerDelegate & UINavigationControllerDelegate)?tan necesario agregar explícitamente UINavigationControllerDelegatecomo uno de los protocolos:

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

2) Asegúrese de que info.plist tenga la Privacy - Photo library Usage Descriptionclave y el valor de cadena establecidos.

Por supuesto, debe asegurarse de crear UIImagePickerControllery establecer su delegado igual a selfen ViewDidLoad():

class ViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    let imagePickerController = UIImagePickerController()
    override func viewDidLoad() {
        super.viewDidLoad()
        imagePickerController.delegate = self
    }
    ...
}
G Reynolds-Titko
fuente
4
tengo todo esto en mi proyecto ... todavía no funciona
Mohamed Lee
Gracias, me perdí la configuración del delegado en viewDidLoad ()
Arshad Shaik
11

Solucioné este problema, llame a la función a continuación en viewdidload o viewWillAppear o viewDidAppear para verificar el permiso de su aplicación.

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

Y para usar el método anterior, no olvide agregar import Photosen la parte superior de la clase.

logan.Nguyen
fuente
11

XCODE 10.1 / SWIFT 4.2:

  1. Agregar los permisos requeridos (otros mencionados)

  2. Implemente esta función de delegado:

    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)
    }
Viernes
fuente
1
Verdadera forma de usar la función imagePickerController en Swift 4x
Samet Sazak
10

* Falta DELEGADO * en Swift 3

En mi caso, todas las configuraciones eran correctas:
1 - Delegados (UIImagePickerControllerDelegate, UINavigationControllerDelegate);
2 - Permisos ya verificados;
3 - Plist ya hecho;
4 - Todo lo leído en esto Respuestas, lo hice;

Pero olvidé implementar pickerview.delegate = selfenviewDidLoad Porque puedo copiar y pegar de mi otra viewController y olvidar que!

Espero que ayude a alguien, primero revise su COPIA / PEGADO !!!

Daniel Arantes Loverde
fuente
Gracias, estoy luchando durante muchas horas y me he perdido "UINavigationControllerDelegate", finalmente salvaste, gracias
Sakthimuthiah
Me alegro de ayudar :)
Daniel Arantes Loverde
8

Puede que esta no sea la respuesta más directamente útil, ¡pero es de esperar que ayude! Estoy 99% seguro de que este mensaje de error en particular no le indica el problema real. Pasé horas tirándome de los pelos por este mismo problema.

1) Tenía autorización para imprimir fotos en la consola cuando iniciaba mi selector, 2) podía navegar y seleccionar una foto con bastante facilidad y 3) cuando me devolvía a mi vista al cerrar el selector, la imagen de mi botón no se actualizó con la nueva foto ... y el único indicio de que tenía el problema era exactamente el mismo mensaje de error que está recibiendo.

Resulta que estaba codificando una imagen de marcador de posición en ViewWillAppear en lugar de ViewDidLoad. Cada vez que el selector descartaba, llamaba a ViewWillAppear y reemplazaba mi imagen elegida con mi imagen codificada. Solucioné ese problema y, por supuesto, todo funciona bien ahora ... y sigo viendo ese mensaje de error cada vez que regreso del selector.

Recomiendo buscar en otro lugar que no sea ImagePicker para su problema y probablemente lo encontrará.

Levi Lais
fuente
7

Si no lo ha hecho, intente esto .

Producto> Esquema> Editar esquema> Variables de entorno OS_ACTIVITY_MODE: disable

Resuelve mi problema.

Changnam Hong
fuente
23
Esto suprime los mensajes de error pero no aborda su causa. También suprime otros mensajes del sistema y cualquier cosa de NSLog.
John Montgomery
6
Esto no 'resuelve' el problema, solo lo hace invisible. Muy mala práctica.
zeeshan
Esto es el equivalente a esconder la suciedad debajo de la alfombra tbh
shiv
7

Esto soluciona el problema en Swift 4:

Cambiar el código a continuación

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

a esto:

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


Swift 4.2 update:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]){}
usuario2153553
fuente
Mi error se parecía a esto: errores encontrados al descubrir extensiones: Error Domain = PlugInKit Code = 13 "consulta cancelada" UserInfo = {NSLocalizedDescription = consulta cancelada} Y esto resolvió mi problema, aunque no puedo hablar si esto ayuda al OP . Gracias :)
agrippa
6

Recibí el mismo mensaje cuando intentaba presentar otro controlador desde la devolución de llamada del selector imagePickerController. La solución que funcionó para mí fue mover mi código dentro de la devolución de llamada de finalización desde el método de descarte del selector

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)
            }
        }
    }
Mario Vasile
fuente
Gran respuesta, me ahorraste tiempo 👍🏼
Coder ACJHP
¡Funcionó maravillosamente! Piense que esta es la forma correcta de lidiar con los errores del selector en Swift 4.x.
shiv
4

Asegúrese de que está subclasificando ambos: UIImagePickerControllerDelegate, UINavigationControllerDelegate .

Además, recuerde configurar el delegado:

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éditos a esta fuente .

Ryan
fuente
picker.delegate = self - ¡fue mi caso! Gracias.
Alexey Chekanov
4

Encontrar la solución a este problema me llevó una eternidad. Parece que el problema es que no se puede encontrar la función imagePickerController de UIImagePickerControllerDelegate. Si configuró el delegado correctamente y dejó de funcionar después de actualizar a Swift 4, es probable que el problema sea que no lo hizo accesible para Objective-C usando @objc, que se requiere desde Swift 4.

Tiene que ser:

@objc func imagePickerController (...

en vez de

func imagePickerController(...
Apfelsaft
fuente
Crea errorObjective-C method 'imagePickerController:didFinishPickingMediaWithInfo:' provided by method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' conflicts with optional requirement method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' in protocol 'UIImagePickerControllerDelegate'
Nico Neill
¡Exactamente, esta es la forma de solucionarlo!
Maria Ortega
@NicoNeill, ¿agregaste la función en un extensionbloque?
Prometheos II
4

Se corrigió configurando un retraso de 1 segundo al configurar la imagen.

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
        })
    }
}
Dharmesh Kheni
fuente
3

Asegúrese de agregar internal funcal principio y luego agregue la minúscula después del paréntesis ( _ picker: UIImagePickerController…y luego cambie de AnyObjecta Any) ...
Verifique el código a continuación:

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)
}
Sabino Díaz
fuente
3

Esto me dejó perplejo, pero la respuesta en el enlace de abajo funcionó para mí. El error desaparece y la imagen se muestra como se esperaba

Como una de las respuestas anteriores, debe tener (_ picker...pero también @objcantes de la función.

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

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

EGibson
fuente
2

Esto resolvió mi error:

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)

}
Desarrollador iOS
fuente
2

Verifique los pasos siguientes:

  1. Importar fotos
  2. Tiene acceso al álbum:

    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. El paso clave, asegúrese de que el método delegado sea como seguir estrictamente

    // 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)
    }
xuzepei
fuente
2

Esto es lo que hice y resolvió mi problema.

  • agregar @objc
  • agregar interno
  • agregar _ antes de imagePicker
  • asegúrese de que está usando Any y no AnyObject

¡Espero que esto ayude!

FreitDev
fuente
Hmm, internales el predeterminado; Me pregunto qué diferencia hay para especificarlo ...
Nicolas Miari
2

En mi caso, recibí este error porque estaba presentando un controlador de selector de imágenes sin verificar primero si el usuario había permitido el acceso a las imágenes. En otra parte de mi código, el usuario había otorgado permiso, así que creo que todo lo que tenía que hacer era importar fotos. Sin embargo, dado que 'pueden' no haber otorgado permiso en ese momento en la aplicación, agregar esto justo antes de que presentara el controlador del selector de imágenes resolvió el problema (también importar fotos).

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

        })
    }

Si esta respuesta parece redundante, mis disculpas, pero tuve que juntar algunas respuestas diferentes para que mi solución funcione. Quizás esto ayude a alguien más a usar Swift 4.

Jason Rybka
fuente
2

usa este código

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

Este error "Error Domain = PlugInKit Code = 13" ha confundido a mucha gente a pesar de que parece ser un mensaje de depuración de Apple inofensivo. Estaba teniendo problemas para obtener la imagen que elegí para configurar en mi interfaz de usuario y pensé que ese error era el problema, sin embargo, era algo un poco más sutil.

Tengo mi controlador de selector de imágenes en un archivo separado del controlador de vista que 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 mayoría de los tutoriales y las respuestas tienen la finalización establecida en cero. Sin embargo, si establece la finalización en nil y llama al método didSelect del delegado por separado, se llama al método pero la imagen no se establece, así que asegúrese de utilizar la finalización de descarte.

Y nuevamente, sé que esta respuesta podría no estar directamente relacionada con la pregunta original, pero tengo la sensación de que mucha gente viene aquí por este problema y las soluciones dadas no están ayudando. La razón es que la mayoría de las personas que dan respuestas tienen su controlador de selector de imágenes en la misma clase que su controlador de vista principal y, por lo tanto, no necesitan completar.

Braden Holt
fuente
Esto es exactamente lo que necesitaba. ¡Gracias!
AJ Hernandez
1

El error también ocurre cuando no ha configurado los permisos de uso de la biblioteca de fotos en ustedInfo.plist archivo.

Es necesario añadir Privacy - Photo Library Usage Descriptionen el Info.plistcon una cadena que aparecerá cuando su aplicación intenta la primera vez para acceder a la biblioteca de fotos del usuario.

Los Info.plistajustes finales deberían verse así: ingrese la descripción de la imagen aquí

Conocimiento
fuente
1

Tengo el mismo error y lo solucioné de esta manera:

obtener el objeto de imagen de manera diferente depende de UIImagePickerController permite La edición es verdadera o falsa

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

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

    ....

}

Y, por supuesto, solicite permiso para acceder a la biblioteca de fotos primero como los comentarios anteriores.

melson.jao
fuente
1

Por mi parte, UINavigationControllerDelegatefalta un delegado.

class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate

Aleem
fuente
0

Me encontré con el mismo problema. Ninguna de las sugerencias mencionadas anteriormente funcionó para mí. Sin embargo, lo resolví al llamar explícitamente al picker.dismiss y descartar la publicación. No tengo claro por qué he hecho llamadas de descarte como esa, pero funcionó para mí.

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

}
Vyshakh
fuente
0

Leí todas estas respuestas y las modifiqué un poco aquí y no es necesario descartarlas, esto funcionó para mí, gracias a otros que respondieron aquí.

    @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
       }
    }
Rakshitha Muranga Rodrigo
fuente
0

Encontré la solución 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)
    }
Muhammad Hamid
fuente
0

haga clic en imageView para cargar la imagen de la biblioteca de fotos y mostrar la vista previa en la misma vista de imagen. en 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)
            }
roshan posakya
fuente
0

Tuve este mismo problema en Swift 4.2 y Xcode 10.0 . Aunque el selector de imágenes funcionaba correctamente, Xcode mostró este error en la consola. Para deshacerse de esto:

  • En el menú Xcode Producto> Esquema> Editar esquema
  • Seleccione la pestaña 'Ejecutar', luego 'Argumentos'
  • En la sección 'Variables de entorno', agregue una variable con el nombre OS_ACTIVITY_MODE y el valor deshabilitado
Marcos Reboucas
fuente
Bueno ... no realmente ... para mí muestra este error, pero no se llama al método didFinishPickingMediaWithInfo ... así que necesitaba habilitar este valor para ver este error
Mohamed Lee