Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在展开可选值时意外发现nil。avcapturedeviceinput_Ios_Swift_Xcode11 - Fatal编程技术网

Ios 在展开可选值时意外发现nil。avcapturedeviceinput

Ios 在展开可选值时意外发现nil。avcapturedeviceinput,ios,swift,xcode11,Ios,Swift,Xcode11,我正在用swift代码编写一个简单的照相机应用程序。我尝试了两种不同的方法,但两种方法的错误都是一样的 线程1:致命错误:在展开可选值时意外发现nil 这里 let input=尝试AVCaptureDeviceInput(设备:captureDevice!) 我如何修复它?您是否在模拟器中运行它?因为它不会起作用。它将在真正的设备中工作。还可以使用if-let语句安全地打开captureDevice。这不会使应用程序崩溃 class ViewController: UIViewControll

我正在用swift代码编写一个简单的照相机应用程序。我尝试了两种不同的方法,但两种方法的错误都是一样的

线程1:致命错误:在展开可选值时意外发现nil

这里

let input=尝试AVCaptureDeviceInput(设备:captureDevice!)


我如何修复它?

您是否在模拟器中运行它?因为它不会起作用。它将在真正的设备中工作。还可以使用if-let语句安全地打开captureDevice。这不会使应用程序崩溃

class ViewController: UIViewController {

    @IBOutlet weak var cameraView: UIView!

    var captureSession: AVCaptureSession?
    var videoPreviewLayer: AVCaptureVideoPreviewLayer?
    var frontCamera = AVCaptureDevice.default(.builtInWideAngleCamera, for :.video, position: .front)
    var backCamera = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)


    override func viewDidLoad() {
        super.viewDidLoad()

        if #available(iOS 10.2, *){

            let captureDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)
            do{
                let input = try AVCaptureDeviceInput(device: captureDevice!)
                captureSession = AVCaptureSession()
                captureSession?.addInput(input)
                videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession!)
                videoPreviewLayer?.frame = view.layer.bounds
                cameraView.layer.addSublayer(videoPreviewLayer!)
                captureSession?.startRunning()
            }
            catch {
                print("error")
            }
        }
        // Do any additional setup after loading the view.
    }

    @IBAction func ImageCapture(_ sender: Any) {

    }
这里将帮助您,它包装的价值,如果肯定不是零,并继续与确认包装价值的程序流。下面是Swift中的
可选绑定示例

if #available(iOS 10.2, *){

    if let captureDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) {
        do{
            let input = try AVCaptureDeviceInput(device: captureDevice)
            captureSession = AVCaptureSession()
            captureSession?.addInput(input)
            videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession!)
            videoPreviewLayer?.frame = view.layer.bounds
            cameraView.layer.addSublayer(videoPreviewLayer!)
            captureSession?.startRunning()
        }
        catch {
            print("error")
        }
    } else {
        print("camera not available")
    }
}

你在模拟器里运行它吗?因为它不起作用。它将在实际设备中工作。也可以使用if-let语句安全地打开captureDevice哦,我明白了。我不会使用模拟器。您是否在plist中添加了NSCameraUsageDescription并使用了requestAccess(for:completionHandler:)
if let captureDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) {
    // do you desired code here, here captureDevice object has a confirmed value 
}else{
    // here captureDevice is nil, can assist the user accordingly
}