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

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

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.


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.


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

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.


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

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


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á.


7

Si no lo ha hecho, intente esto .

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

Resuelve mi problema.


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

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

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 .


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(...

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

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

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


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)

}

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

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!


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.


2

usa este código

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

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.


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í


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.


1

Por mi parte, UINavigationControllerDelegatefalta un delegado.

class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate


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

}

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

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

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

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.