“Crear un formato de imagen con un tipo desconocido es un error” con UIImagePickerController

Al elegir una imagen del selector de imágenes en iOS 10 Swift 3, Creating an image format with an unknown type is an error : Creating an image format with an unknown type is an error

  func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { imagePost.image = image self.dismiss(animated: true, completion: nil) } 

La imagen no se está seleccionando y actualizando. Necesito ayuda o sugerencia para saber si la syntax o algo relacionado con este método se ha modificado en iOS10 o Swift 3 o existe alguna otra forma de hacerlo.

El código mencionado a continuación me solucionó el problema:

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imagePost.image = image } else{ print("Something went wrong") } self.dismiss(animated: true, completion: nil) } 

Recuerde agregar delegado a sí mismo

 let picker = UIImagePickerController() picker.delegate = self // delegate added 

El siguiente código resolvió el problema:

Si el usuario realiza cambios en la imagen seleccionada, extraiga solo esa imagen, de lo contrario, extraiga la fuente de la imagen original sin realizar ningún cambio y, finalmente, desestime el controlador de visualización del selector de imágenes.

 public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]){ if let image = info[UIImagePickerControllerEditedImage] as? UIImage { imageView.image = image } else if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imageView.image = image } else{ print("Something went wrong") } self.dismiss(animated: true, completion: nil) } 

Si permite la edición de la imagen imageController.allowsEditing = true deberá obtener la imagen editada:

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { picker.dismissViewControllerAnimated(true, completion: nil) if let image = info[UIImagePickerControllerEditedImage] as? UIImage { imagePost.image = image } else if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imagePost.image = image } else { imagePost.image = nil } } 

La solución aceptada por Jeetendra Choudhary funciona. Aunque en Xcode 8 con Swift 3, noté que genera una advertencia: el Instance method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' nearly matches optional requirement 'imagePickerController(_:didFinishPickingMediaWithInfo:)' of protocol 'UIImagePickerControllerDelegate'

enter image description here

y sugiere agregar @nonobjc o palabra clave privada para silenciar la advertencia. Si silencia la advertencia con estas sugerencias, la solución ya no funcionará.

Encontré que las imágenes predeterminadas en la biblioteca de fotos podrían resolver este problema. Si arrastras una imagen de tu computor al simulador y la eliges. este problema esta resuelto

Según la respuesta de Abdurohman, cambio mi código y resuelvo el problema, gracias.

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage photoImageView.image = selectedImage // Dismiss the picker. dismiss(animated: true, completion: nil) } 

Agregar esto a viewDidload ()

 imagepicker.delegate = self 

Agregue “_” en los parámetros de la función.

de

 func imagePickerController(picker: UIImagePickerController ... 

a

 func imagePickerController(_ picker: UIImagePickerController ... 

Esto funcionó para mí:

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imageView.image = image self.dismiss(animated: true, completion: nil) } } 

Si esto ayuda a alguien, sucedió esto cuando subclassicé UIImageView para crear una vista redondeada. También sucedió cuando agregué la siguiente línea en viewDidLoad ()

 imageView.layer.cornerRadius = self.imageView.frame.size.width / 2 

Terminé agregando la línea en viewWillLayoutSubViews y funcionó. Vea esto para más detalles:

clipsToBounds hace que UIImage no se muestre en iOS10 y XCode 8

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let image = info[UIImagePickerControllerOriginalImage] as? UIImage self.dismiss(animated: true, completion: nil) self.imageTook.image = image } 

Cambie la didFinishPickingMediaWithInfo info: [String : AnyObject] , a didFinishPickingMediaWithInfo info: [String : Any]

Para Xcode 8.1 con swift 3, después de cambiar el método de delegado como se muestra a continuación

cambia tu

 func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { imagePost.image = image self.dismiss(animated: true, completion: nil) } 

funcionar para

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { imagePost.image = info[UIImagePickerControllerOriginalImage] as? UIImage picker.dismiss(animated: true, completion: nil) } 

Olvidé agregar UINavigationControllerDelegate junto con UIImagePickerControllerDelegate en

 class ViewController:UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate 

Habría agregado una variable al principio como

var imagePicker = UIImagePickerController ()

y configurar delegar y llamar a una función en viewdidload () como

  imagePicker.delegate = self viwImagePick() 

Luego explica esa función como

  //ImagePicker func viwImagePick(){ let alert = UIAlertController(title: nil, message: "Choose your source", preferredStyle: UIAlertControllerStyle.alert) alert.addAction(UIAlertAction(title: "Camera", style: UIAlertActionStyle.default) { (result : UIAlertAction) -> Void in print("Camera selected") self.openCamera() //Code for Camera //cameraf }) alert.addAction(UIAlertAction(title: "Photo library", style: UIAlertActionStyle.default) { (result : UIAlertAction) -> Void in print("Photo selected") self.openGallary() //Code for Photo library //photolibaryss }) self.present(alert, animated: true, completion: nil) } func openCamera() { imagePicker.sourceType = UIImagePickerControllerSourceType.camera if UIDevice.current.userInterfaceIdiom == .phone { self.present(imagePicker, animated: true, completion: nil) } else { let popover = UIPopoverController(contentViewController: imagePicker) popover.present(from: profileImgViw.frame, in: self.view, permittedArrowDirections: UIPopoverArrowDirection.any, animated: true) } } func openGallary() { imagePicker.sourceType = UIImagePickerControllerSourceType.savedPhotosAlbum if UIDevice.current.userInterfaceIdiom == .phone { self.present(imagePicker, animated: true, completion: nil) } else { let popover = UIPopoverController(contentViewController: imagePicker) popover.present(from: profileImgViw.frame, in: self.view, permittedArrowDirections: UIPopoverArrowDirection.any, animated: true) } } 

Ahora la imagen se agrega a la vista de imagen de la biblioteca

Creo que te falta una conexión entre photoImageView y la imagen.

Eche un vistazo a mis capturas de pantalla a continuación:

enter image description here

enter image description here

Creo que te falta una conexión entre photoImageView y la imagen.

Eche un vistazo a mis capturas de pantalla a continuación:

enter image description here

enter image description here

¡Buena suerte!