#質問したいこと
現在カメラを使うアプリを作成中です。
画面推移をする時にThread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional valueというエラーが出てしまいます。
#コード
swift
1 2import UIKit 3import AVFoundation 4class CameraViewController: UIViewController { 5 6 7 8 9 10 var captureSession = AVCaptureSession() 11 12 //カメラの画質の決定 13 func setupCaptureSession() { 14 captureSession.sessionPreset = AVCaptureSession.Preset.photo 15 } 16 17 //カメラデバイスそのものを管理するオブジェクトの作成 18 //メインカメラの管理オブジェクトの作成 19 var mainCamera: AVCaptureDevice? 20 //インカメの管理オブジェクトの作成 21 var innnerCamera: AVCaptureDevice? 22 //現在使用しているカメラデバイスの管理オブジェクトの作成 23 var currentDevice: AVCaptureDevice? 24 25 @IBOutlet weak var cameraButton: UIButton! 26 27 28 func setupDevice() { 29 //カメラデバイスのプロパティ設定 30 let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [AVCaptureDevice.DeviceType.builtInWideAngleCamera], mediaType: AVMediaType.video, position: AVCaptureDevice.Position.unspecified 31 ) 32 33 //プロパティの条件を満たしたカメラデバイスの取得 34 let devices = deviceDiscoverySession.devices 35 36 for device in devices { 37 if device.position == AVCaptureDevice.Position.back { 38 mainCamera = device 39 }else if device.position == AVCaptureDevice.Position.front{ 40 innnerCamera = device 41 } 42 } 43 //起動時のカメラを設定 44 currentDevice = mainCamera 45 46 } 47 48 //キャプチャー出力データを受け付けるオブジェクト 49 var photoOutput : AVCapturePhotoOutput? 50 51 //入出力データの設定 52 func setupInputOutput(){ 53 do { 54 // 55 let captureDeviceInput = try AVCaptureDeviceInput(device: currentDevice!) 56 // 57 captureSession.addInput(captureDeviceInput) 58 // 59 photoOutput = AVCapturePhotoOutput() 60 // 61 photoOutput!.setPreparedPhotoSettingsArray([AVCapturePhotoSettings(format: [AVVideoCodecKey : AVVideoCodecKey])], completionHandler: nil) 62 captureSession.addOutput(photoOutput!) 63 }catch{ 64 print(error) 65 } 66 } 67 68 // 69 var cameraPreviewLayer : AVCaptureVideoPreviewLayer? 70 71 // 72 func setupPreviewLayer(){ 73 // 74 self.cameraPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill 75 // 76 self.cameraPreviewLayer?.connection?.videoOrientation = AVCaptureVideoOrientation.portrait 77 78 self.cameraPreviewLayer?.frame = view.frame 79 self.view.layer.insertSublayer(self.cameraPreviewLayer!, at: 0) 80 } 81 82 func styleCaptureButton(){ 83 cameraButton.layer.borderColor = UIColor.white.cgColor 84 cameraButton.layer.borderWidth = 5 85 cameraButton.clipsToBounds = true 86 cameraButton.layer.cornerRadius = min(cameraButton.frame.width, cameraButton.frame.height) / 2 87 } 88 89 @IBAction func cameraButton_TouchUpInside(_ sender: Any){ 90 let settings = AVCapturePhotoSettings() 91 //フラッシュの設定 92 settings.flashMode = .auto 93 //カメラの手ブレ補正 94 settings.isAutoStillImageStabilizationEnabled = true 95 //撮影された画像をdelegateメソッドで処理 96 self.photoOutput?.capturePhoto(with: settings, delegate: self as! AVCapturePhotoCaptureDelegate) 97 } 98 99 100 101 override func viewDidLoad() { 102 super.viewDidLoad() 103 104 setupCaptureSession() 105 setupDevice() 106 setupInputOutput() 107 setupPreviewLayer() 108 captureSession.startRunning() 109 110 // Do any additional setup after loading the view. 111 } 112 113 114 /* 115 // MARK: - Navigation 116 117 // In a storyboard-based application, you will often want to do a little preparation before navigation 118 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 119 // Get the new view controller using segue.destination. 120 // Pass the selected object to the new view controller. 121 } 122 */ 123 124} 125 126extension CameraViewController: AVCapturePhotoCaptureDelegate{ 127 //撮影した画像データが生成された時に呼び出されるdelegateメソッド 128 func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) { 129 if let imageData = photo.fileDataRepresentation(){ 130 //Data型をUIImageオブジェクトに変換 131 let uiImage = UIImage(data: imageData) 132 //写真ライブラリーに画像を保存 133 UIImageWriteToSavedPhotosAlbum(uiImage!, nil, nil, nil) 134 } 135 } 136} 137
#参考にしたサイト
https://qiita.com/t_okkan/items/b2dd11426eab107c5d15
こちらのサイトをもとに今回のアプリを作成しました。
#関連付け
よろしくお願いします。
どこの部分がnilと言っているんですか???
コードが止まるとこを示してください。
回答1件
あなたの回答
tips
プレビュー