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)
}
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
los 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.Respuestas:
Debe hacer una referencia explícita a Objective-C:
@objc
fuente
dismiss
.extension [your class name]
bloque, fuera de la clase.Encontré esta solución. Recibimos este error debido a estas dos razones que se mencionan a continuación.
Código de Autorización
didFinishPickingMediaWithInfo
Incorrecto:
Correcto
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.
fuente
picker.dismiss(animated: true, completion: nil)
¡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!
Estoy seguro de que alguien puede decirte cómo hacer lo mismo en Swift.
fuente
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:
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
UIImagePickerController
es(UIImagePickerControllerDelegate & UINavigationControllerDelegate)?
tan necesario agregar explícitamenteUINavigationControllerDelegate
como uno de los protocolos:2) Asegúrese de que info.plist tenga la
Privacy - Photo library Usage Description
clave y el valor de cadena establecidos.Por supuesto, debe asegurarse de crear
UIImagePickerController
y establecer su delegado igual aself
enViewDidLoad()
:fuente
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.
Y para usar el método anterior, no olvide agregar
import Photos
en la parte superior de la clase.fuente
XCODE 10.1 / SWIFT 4.2:
Agregar los permisos requeridos (otros mencionados)
Implemente esta función de delegado:
fuente
* 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 = self
enviewDidLoad
Porque puedo copiar y pegar de mi otra viewController y olvidar que!Espero que ayude a alguien, primero revise su COPIA / PEGADO !!!
fuente
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á.
fuente
Si no lo ha hecho, intente esto .
Resuelve mi problema.
fuente
NSLog
.Esto soluciona el problema en Swift 4:
Cambiar el código a continuación
a esto:
fuente
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 selectorfuente
Asegúrese de que está subclasificando ambos:
UIImagePickerControllerDelegate, UINavigationControllerDelegate
.Además, recuerde configurar el delegado:
Créditos a esta fuente .
fuente
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:
en vez de
fuente
Objective-C method 'imagePickerController:didFinishPickingMediaWithInfo:' provided by method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' conflicts with optional requirement method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' in protocol 'UIImagePickerControllerDelegate'
extension
bloque?Se corrigió configurando un retraso de 1 segundo al configurar la imagen.
fuente
Asegúrese de agregar
internal func
al principio y luego agregue la minúscula después del paréntesis (_ picker: UIImagePickerController…
y luego cambie deAnyObject
aAny
) ...Verifique el código a continuación:
fuente
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@objc
antes de la función.https://forums.developer.apple.com/thread/82105
fuente
Esto resolvió mi error:
fuente
Verifique los pasos siguientes:
Tiene acceso al álbum:
Presente UIImagePickerController
El paso clave, asegúrese de que el método delegado sea como seguir estrictamente
fuente
Esto es lo que hice y resolvió mi problema.
¡Espero que esto ayude!
fuente
internal
es el predeterminado; Me pregunto qué diferencia hay para especificarlo ...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).
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.
fuente
usa este código
fuente
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
ImagePicker.swift
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.
fuente
El error también ocurre cuando no ha configurado los permisos de uso de la biblioteca de fotos en usted
Info.plist
archivo.Es necesario añadir
Privacy - Photo Library Usage Description
en elInfo.plist
con una cadena que aparecerá cuando su aplicación intenta la primera vez para acceder a la biblioteca de fotos del usuario.Los
Info.plist
ajustes finales deberían verse así:fuente
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
Y, por supuesto, solicite permiso para acceder a la biblioteca de fotos primero como los comentarios anteriores.
fuente
Por mi parte,
UINavigationControllerDelegate
falta un delegado.class YourViewController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate
fuente
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í.
fuente
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í.
fuente
Encontré la solución de IMage PickerView .....
fuente
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
fuente
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:
fuente