You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift执行segue从HomeViewController跳转PreviewViewController出现image相关报错

问题根因

两个报错都指向同一个核心问题:你没有在HomeViewController中声明用于存储拍摄结果的image属性,代码中两处对image的读写操作都没有对应变量支撑。
同时你的代码还存在3处隐性问题会导致跳转后无图、跳转逻辑不生效:

  • segue标识判断多写了末尾空格,匹配不到你在Storyboard设置的"showPhoto"
  • 拍照按钮点击后立刻执行跳转,此时拍照还未完成,还没生成图片
  • 直接给PreviewViewController的UIImageView类型IBOutlet赋值UIImage,要么崩溃要么赋值不生效

修复步骤

第一步:给HomeViewController加存储图片的属性

在HomeViewController的属性声明区域新增如下代码:

var capturedImage: UIImage?

修改photoOutput回调中的赋值逻辑,把生成的图片存到这个属性里:

func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
    if let imageData = photo.fileDataRepresentation() {
        // 替换原来的image = ...
        capturedImage = UIImage(data: imageData)
        performSegue(withIdentifier: "showPhoto", sender: nil)
    }
}

第二步:修复prepare方法的两处错误

  1. 删掉segue标识末尾的多余空格
  2. 给PreviewViewController的imageView正确赋值
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // 去掉原来的末尾空格
    if segue.identifier == "showPhoto" {
        let previewVC = segue.destination as! PreviewViewController
        // 给UIImageView的image属性赋值,而不是直接给UIImageView赋值
        previewVC.image.image = capturedImage
    }
}

第三步:删掉拍照按钮中多余的跳转代码

你在camerabtn点击方法中执行的跳转是多余的,会在拍照未完成时就触发跳转,直接删除该方法中的这一行:

performSegue(withIdentifier: "showPhoto", sender: nil)

可选优化(推荐)

避免直接操作PreviewViewController的IBOutlet,防止控制器未加载完成时IBOutlet为nil导致赋值失效,给PreviewViewController新增一个接收图片的属性:

class PreviewViewController: UIViewController {
    // 新增接收图片的属性
    var receivedImage: UIImage?
    
    @IBOutlet weak var image : UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // 页面加载完成后再给imageView赋值
        image.image = receivedImage
    }
    // 其余原有代码保持不变
}

对应的prepare方法中的赋值逻辑修改为:

previewVC.receivedImage = capturedImage

内容的提问来源于stack exchange,提问作者Wen Love Howard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:36:03