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