如何为UIImageView(Swift 3)分配一张图片

3

我正在尝试将图库中的图片添加到新的ViewController中,但是出现了错误。

创建一个未知类型的图像格式是一个致命错误:在解包可选值时意外地发现了nil

代码:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        if let im = info[UIImagePickerControllerOriginalImage] as? UIImage {
            let vc = self.storyboard?.instantiateViewController(withIdentifier: "editImage") as! EditImageViewController
            vc.imageView.image = im
            self.present(vc, animated: true, completion: nil)
        } else {
            print("Something went wrong")
    }
    imagePicker.dismiss(animated: true, completion: nil)
}

我的错误在哪里?

1个回答

10

您的EditImageViewController.imageView为nil。为了从外部传递图像,您需要将UIImage属性添加到EditImageViewController中。

要将该图像分配给UIImageView,请使用viewDidLoad()

像这样:

class EditImageViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    var imageToAdd: UIImage?

    override func viewDidLoad() {
        super.viewDidLoad()
        self.imageView.image = imageToAdd
    }
}

要将图片传递到新控制器中,只需设置imageToAdd,因此vc.imageView.image = im变为vc.imageToAdd = im


具体来说,一般而言,任何外部代码都不应直接访问视图控制器的视图。外部代码只能向视图控制器提供信息/数据。让视图控制器根据数据更新自己的视图是MVC设计背后的一个要点。 - rmaddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接