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

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

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

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

Q&A

解決済

1回答

1050閲覧

予期せぬnilのエラーについて

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2020/10/07 04:20

編集2020/10/07 04:42

以下のコードをビルドさせた際に、エラーが出ました。

UIKit

1import AVFoundation 2import photes 3 4class ViewController: UIViewController { 5 6 override func viewDidLoad() { 7 8 // パスからassetを生成. 9 let path = Bundle.main.path(forResource: "ビデオ名前", ofType: "mp4") 10 let fileURL = URL(fileURLWithPath: path!) 11 let avAsset = AVURLAsset(url: fileURL, options: nil) 12 13 // assetから画像をキャプチャーする為のジュネレーターを生成. 14 let generator = AVAssetImageGenerator(asset: avAsset) 15 generator.maximumSize = self.view.frame.size 16 17 // 動画の指定した時間での画像を得る(今回は動画の最後のキャプチャを撮る). 18 let capturedImage = try! generator.copyCGImage(at: avAsset.duration, actualTime: nil) 19 20 // 静止画用のImageViewを生成. 21 let imageView = UIImageView(frame: self.view.frame) 22 imageView.image = UIImage(cgImage: capturedImage) 23 print(avAsset.duration) 24 25 // imageViewをviewに追加. 26 self.view.addSubview(imageView) 27 } 28}

エラーが出たのは以下のコードです。

let fileURL = URL(fileURLWithPath: path!)

致命的エラー:オプション値のアンラップ中に予期せずnilが見つかりました

" "が空だと表示されるエラーと書いてあったので、動画をプロジェクトに読み込み、" "に名前と拡張子を設定しました。
しかし改善はされませんでした。
解決法があれば回答いただけると嬉しいです。

試したこと、結果
・ビルドし、開いたら画面は真っ白
・Assetliblaryが非推奨のためphotesを使用

環境 xcode12 swift5

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

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

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

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

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

TsukubaDepot

2020/10/07 04:50

> " "が空だと表示されるエラーと書いてあったので、動画をプロジェクトに読み込み、" "に名前と拡張子を設定しました。 プロジェクトのどこに追加したのでしょうか。 ちなみに、Assets.xcassets の中だと、Bundle.main.pathでは見つけることができないので、ほかの swift ファイルと同じフォルダにおく必要があります。
退会済みユーザー

退会済みユーザー

2020/10/07 06:15

確認しました。Assets.xcasstsの中に動画はなく、他swiftファイルと同じフォルダにあります。しかしcaputure5(プロジェクト名)フォルダの中に、Assets.xcasstsが入っています。それが原因でしょうか?
guest

回答1

0

ベストアンサー

下記の手順で行ってみていただけますでしょうか。

Project Navigator にファイルをドラッグする(ファインダーから直接ドラッグ可能)

イメージ説明

このとき、黄色いフォルダと同じ階層になるようにする。

このようなダイアログが表示されるので「Copy items if needed」を選択し、「Finish」を選択する。

イメージ説明

コピーしなくても動きますが、オリジナルを消したりファイル名を変更すると失敗するため、コピーを作っておきます。

ドラッグしたファイルをクリックすると、右側ペインが File Inspector になるので、そこでファイル名をドラッグし、コピーしておく。

イメージ説明

コピーしておくことで、ファイル名の指定ミスを防げます。

コード中のファイル名、および(いわゆる)拡張子の部分に、先ほどコピーしたファイル名などをペーストする。

イメージ説明

よくあるミスは、forResource: に拡張子を含めてしまうミスです。これだとうまくいきませんので、必ずforResource:にはファイル名、ofType: に拡張子を指定するようにしてみてください。

すくなくとも、ご提示いただいているソースコードそのものには、ファイル名を除き一切てを加える必要はありません(動作確認しています)。

投稿2020/10/08 01:10

TsukubaDepot

総合スコア5086

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問