使用UIImagePickerController"使用未知类型创建图像格式是一个错误"

Jee*_*eet 76 xcode uiimageview ios swift xcode8

在iOS 10 Swift 3中从图像选择器中选择图像时出现错误 - 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)
}
Run Code Online (Sandbox Code Playgroud)

图像未被选中和更新.我需要帮助或建议才能知道在iOS10或Swift 3中是否更改了此方法的语法或任何内容,或者是否有其他方法可以执行此操作.

Jee*_*eet 28

下面提到的代码确实解决了我的问题 -

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)
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说并不能解决问题.我更新了该函数,并在调用此函数时立即收到错误消息.在那之后使用UIImage不起作用. (21认同)
  • @Tim我仍然得到错误,但访问图像工作正常. (3认同)

小智 11

记得向自己添加委托

let picker = UIImagePickerController()
picker.delegate = self // delegate added
Run Code Online (Sandbox Code Playgroud)


小智 10

下面的代码确实解决了问题:

如果用户对所选图像执行更改,则仅拉动该图像,否则在没有任何更改的情况下拉动原始图像源,最后关闭图像选取器视图控制器.

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)
}
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到Stack Overflow!仅代码答案本身并不是很有用.如果您可以添加一些详细信息来解释如何/为何回答问题,这将有所帮助 (2认同)

oya*_*lhi 7

如果您允许编辑图片,imageController.allowsEditing = true则需要先获取已编辑的图像:

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
    }
}
Run Code Online (Sandbox Code Playgroud)


Ash*_*ldr 5

接受的解决方案通过杰滕德拉乔杜里 works.Although在Xcode 8夫特3,我注意到,它生成一个警告: Instance method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' nearly matches optional requirement 'imagePickerController(_:didFinishPickingMediaWithInfo:)' of protocol 'UIImagePickerControllerDelegate'

在此输入图像描述

并建议添加@nonobjc私有关键字以使警告静音.如果您使用这些建议使警告静音,则解决方案不再有效.


小智 5

我发现照片库中的默认图像可以解决这个问题.如果将图像从计算机拖动到模拟器上并选择它.这个问题解决了