【问题标题】:Error when instantiating AVCaptureDeviceInput [duplicate]实例化 AVCaptureDeviceInput 时出错 [重复]
【发布时间】:2018-02-03 15:06:41
【问题描述】:

我正在构建一个底部栏具有不同视图的应用。 左下角按钮打开的 RSS 提要视图和右下角按钮打开的自定义相机。 通过编译应用程序并在模拟器中运行它,当我点击相机按钮时,应用程序冻结并在线

let captureDeviceInput = try AVCaptureDeviceInput(device: captureDevice)

Xcode 显示以下错误:

线程 1:致命错误:打开包装时意外发现 nil 可选值。

这是函数:

 func beginSession () {
        do {
            let captureDeviceInput = try AVCaptureDeviceInput(device: captureDevice)

            captureSession.addInput(captureDeviceInput)

        }catch {
            print(error.localizedDescription)
        }

我该如何解决这个问题?谢谢!

【问题讨论】:

  • captureDevice是如何初始化的?似乎这可能是一个隐式展开的可选选项,因此会出现错误,但没有Minimal, Complete and Verifiable example,没有人可以确定。
  • 我是这样初始化的:var captureDevice:AVCaptureDevice!
  • 那么问题显然是你实际上并没有给captureDevice赋值,而是nil。
  • 好的,谢谢。那我该如何解决呢?

标签: ios swift avcapturedevice


【解决方案1】:

由于captureDevice 被定义为隐式展开的可选项,除非您在第一次访问它之前实际上为其分配了一个非零值,否则您将收到运行时错误。除非您有充分的理由这样做,否则您不应该使用隐式展开的可选项。

您应该简单地将captureDevice 定义为非可选并为其赋值。您可以根据具体用例调整输入参数或使用 AVCaptureDevice 的不同初始化程序。

let captureDevice = AVCaptureDevice.default(for: .video)

func beginSession(){
    do {
        guard let captureDevice = captureDevice else {return}
        let captureDeviceInput = try AVCaptureDeviceInput(device: captureDevice)
        captureSession.addInput(captureDeviceInput)
    }catch {
        print(error.localizedDescription)
    }
}

【讨论】:

  • 现在它显示了这个错误(作为修复它的建议)可选类型“AVCaptureDevice?”的值未拆封;你的意思是用'!'或者 '?'?插入“!”。
  • @TommasoPirola 更新了我的答案
猜你喜欢
  • 2016-04-15
  • 2014-12-04
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 2011-03-21
相关资源
最近更新 更多