質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cocoa

CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

397閲覧

Macアプリケーションでカメラを使用した場合の実行時エラー

vsmorse

総合スコア68

Cocoa

CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/12/16 01:09

前提・実現したいこと

MacApplicationで一定時間おきに写真を撮影し、指定場所に格納するプログラムを組んでいます。
こちらの質問を参考に進めていたのですが、
写真撮影部分を実装中に以下の実行時エラーが発生しました。

発生している問題・エラーメッセージ

RuntimeError

1Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

該当のソースコード

Swift

1import Cocoa 2import AVFoundation 3class ViewController: NSViewController{ 4 var myImageOutput: AVCaptureStillImageOutput! 5 var timer: Timer! 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 let mySession = AVCaptureSession() 9 mySession.sessionPreset = AVCaptureSession.Preset.high 10 var myCamera: AVCaptureDevice! 11 let devices = AVCaptureDevice.devices() 12 for device in devices { 13 if (device.position == AVCaptureDevice.Position.back) { 14 myCamera = device as! AVCaptureDevice 15 } 16 } 17 do { 18 let videoInput = try AVCaptureDeviceInput(device: myCamera) /********** この行で実行時エラー発生 **************/ 19 mySession.addInput(videoInput) 20 myImageOutput = AVCaptureStillImageOutput() 21 mySession.addOutput(myImageOutput) 22 let myVideoLayer = AVCaptureVideoPreviewLayer(session: mySession) 23 myVideoLayer.frame = view.bounds 24 myVideoLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill 25 view.layer!.insertSublayer(myVideoLayer,at:0) 26 mySession.startRunning() 27 } catch let error as NSError { 28 print("cannot use camera (error)") 29 } 30 } 31 32 @IBAction func takePhoto(_ sender: Any) { 33 let myAVConnection = myImageOutput.connection(with: AVMediaType.video) 34 myImageOutput.captureStillImageAsynchronously(from: myAVConnection!, completionHandler: { 35 (imageDataBuffer,error) -> Void in 36 let myImageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataBuffer!)) 37 }) 38 } 39}

試したこと

StackOverFlowを漁りましたが、シミュレーターだとこのような事象が発生するということがわかりましたがMacなので解決には至りませんでした。
エラーメッセージをggったり翻訳にかけてみましたが、それらしき情報が見当たりませんでした。

補足情報(FW/ツールのバージョンなど)

macos Mojave version 10.14.1
Xcode Version 10.1(10B61)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

macの事はわかりませんが、Swiftでそのエラーが出るのは、おそらく該当箇所でmyCameraがnilだからかと思います。ブレークポイントを貼って確認してみてください。

(VCaptureDevice.Position.backに該当するカメラが検出できていないのではないかと)

投稿2018/12/17 02:28

編集2018/12/17 02:29
takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vsmorse

2018/12/17 12:19 編集

回答ありがとうございます! XCodeの使い方が解らずブレークポイントはつけられませんでしたが、実行時エラー発生時に変数ウォッチを確認してみるとたしかにnilになっていました。 質問なのですがnill = 他の言語で言うnullやundefinedという扱いで大丈夫ですか? Swiftのことがあまりわからないので...
takabosoft

2018/12/18 00:27

nilはnullと同じ意味です(nullとundefinedは違う意味かと(^_^;))。Swiftの基礎勉強は絶対にやったほうがいいです。
vsmorse

2018/12/18 07:28

すいません。nullとundefinedは違いますね。間違えてしまいました。 (null = 返すものがない,undefined = 定義されていないであっていますよね?) Swiftの勉強頑張ります!続けて回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問