ios - 在展开可选值时意外发现 nil。avcapturedevice输入
问题描述
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 代码编写一个简单的相机应用程序。我尝试了 2 种不同的方式,但都遇到了相同的错误。
线程 1:致命错误:在展开可选值时意外发现 nil。
这里
let input = try AVCaptureDeviceInput(device: captureDevice!)
我该如何解决?
解决方案
你是在模拟器上运行的吗?因为它不会工作。它将在真实设备中工作。还可以使用 if let 语句安全地打开您的 captureDevice。这不会使应用程序崩溃。
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")
}
}
推荐阅读
- c++ - 在计算所有可能路径问题时计算 nCr
- java - 如何建立从我的 java 程序到 sqlite3 的连接?尝试时打包错误
- python - 无法为 tkinter 复选框设置默认值
- java - 当我运行以下代码检查互联网可用性时生成 IOException
- react-native - React Native - 设置视图的前景色
- python - 线程化 Python3
- javascript - TypeError:无法读取 ElectronJS 应用程序中未定义的属性“协议”
- flutter - 如何在颤振上居中图像
- sas - 如何创建名称与两个数组变量名称连接的变量
- ckeditor - TYPO3 CKE 编辑器允许数据属性