76 votes

"La création d'un format d'image avec un type inconnu est une erreur" avec UIImagePickerController

Tout en choisissant une image dans le sélecteur d’images sous iOS 10 Swift 3, je reçois une erreur - 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)
}
 

L'image n'est pas sélectionnée ni mise à jour. J'ai besoin d'aide ou de suggestion pour savoir si la syntaxe ou quoi que ce soit concernant cette méthode a été modifié dans iOS10 ou Swift 3 ou s'il existe un autre moyen de le faire.

28voto

Jeet Points 2694

Le code ci-dessous a résolu le problème pour moi -

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

11voto

Roberto Gutierrez Points 139

N'oubliez pas d'ajouter délégué à soi-même

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

10voto

keerthi chinivar Points 101

Le code ci-dessous a résolu le problème:

Si l'utilisateur apporte des modifications à l'image sélectionnée, n'extrayez que l'image, sinon extrayez la source de l'image d'origine sans aucune modification et fermez enfin le contrôleur de vue du sélecteur d'images.

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

7voto

oyalhi Points 2082

Si vous autorisez la modification de l'image imageController.allowsEditing = true vous devez d'abord obtenir l'image modifiée:

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

5voto

Ashildr Points 667

La solution retenue par Jeetendra Choudhary œuvres.Bien que dans Xcode 8 avec Swift 3 , j'ai remarqué qu'il génère un message d'avertissement : Instance method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' nearly matches optional requirement 'imagePickerController(_:didFinishPickingMediaWithInfo:)' of protocol 'UIImagePickerControllerDelegate'

enter image description here

et suggère d'ajouter @nonobjc ou privé de mot-clé pour réduire au silence l'avertissement.Si vous le silence de l'avertissement à l'aide de ces suggestions , la solution ne fonctionne plus bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X