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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Swift

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

Q&A

解決済

3回答

488閲覧

Swift3.0でKingfisherのsetImageをしたところビルドエラーが吐き出されます。

yukky05

総合スコア11

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Swift

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

0グッド

0クリップ

投稿2017/09/13 08:45

###前提・実現したいこと
プログラミング初心者です。申し訳ないですが教えていただきたく。
Firebase内のストレージ画像を呼び出し、KingfisherでUIImageに変換する処理をしたいのです。
コンバイル時にはエラーがなかったのですが、ビルドした際に以下のようなエラーを吐き出しました。

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

fatal error: unexpectedly found nil while unwrapping an Optional value error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0). The process has been returned to the state before expression evaluation.

###該当のソースコード

Swift3.0:

1class ChatViewController: JSQMessagesViewController { 2 3 var sendText:String = "" //チャット相手のuidが入ってくる 4 var recieverId:String! 5 var userId : String! 6 var nickName : String! 7 var roomKey : String! 8 var messages = [JSQMessage]() 9 var senderProfileImage : UIImageView! 10 var senderProfileImageInChat : JSQMessagesAvatarImage! 11 var senderProfileImageUrl : String! 12 var recieverProfileImage : UIImageView! 13 var recieverProfileImageInChat : JSQMessagesAvatarImage! 14 var recieverProfileImageUrl : String! 15 var item = [NSDictionary]() 16 17 //自分のプロファイルイメージのURLを呼び出す 18 func getSenderProfileImage(uid :String!, completion:@escaping (_ imageUrl: String) -> Void){ 19 20 let urlData: String = "profile/" + uid + ".jpg" 21 let storage = Storage.storage() 22 let storageRef = storage.reference(forURL: " *firebaseUrl* ") 23 24 storageRef.child(urlData).downloadURL { (URL, error) -> Void in 25 guard let urlString = URL?.absoluteString else { 26 return 27 } 28 // self.recieverProfileImageUrl = urlString 29 completion(urlString) 30 } 31 }

同一クラス内の記述

override func viewDidLoad() { super.viewDidLoad() self.topContentAdditionalInset = 30 recieverId = sendText let ref = Database.database().reference() userId = Auth.auth().currentUser?.uid self.senderDisplayName = "" senderId = userId //nicknamesを取得 ref.child("profile").child(userId!).observeSingleEvent(of: .value, with: { (snapshot) in let value = snapshot.value as? NSDictionary self.senderDisplayName = value?["nickname"] as? String ?? "" self.nickName = self.senderDisplayName }) { (error) in print(error.localizedDescription) } //自分のプロファイルイメージをセット getSenderProfileImage(uid: senderId) { (imageUrl) in let i = (imageUrl) //var url: URL = URL(string: i)! if let url :URL = URL(string: i) { self.recieverProfileImage!.kf.setImage(with: url) } let profileImage = self.recieverProfileImage.image self.recieverProfileImageInChat = JSQMessagesAvatarImageFactory.avatarImage(with: profileImage, diameter: 64) self.collectionView.reloadData() }

###試したこと

po self.recieverProfileImage!.kf.setImage(with: url)
を行いurlには正しいURLが入っていそうでしたが、ビルドエラーの内容がよくわかっておりません。
対処方法を教えていただけると幸いです。

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

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

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

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

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

guest

回答3

0

ご回答ありがとうございました!
>頻繁にクラッシュするアプリは誰も使いたくないので「!」は極力使わないようがいいでしょう。
>アプリがクラッシュすることをビルドエラーとは呼びませんので覚えておくといいです。
こちらも覚えておきます!ただいまrecieverProfileImageの初期化しようとしております。

投稿2017/09/13 23:13

yukky05

総合スコア11

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

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

0

ベストアンサー

fatal error: unexpectedly found nil while unwrapping an Optional value

これは
致命的なエラー: オプショナルをアンラップしようとしたら値がnilでした。
という意味です。

!」が付いた値が使用される時に値がnilである時はこのエラーが出てアプリがクラッシュします。

この場合はrecieverProfileImagenilなのでしょう。

!」は nilになることが絶対にない、あるいはnilであったら修正不能な異常な状態なのでわざとクラッシュさせるようにする時にのみ使用してください。

頻繁にクラッシュするアプリは誰も使いたくないので「!」は極力使わないようがいいでしょう。

アプリがクラッシュすることをビルドエラーとは呼びませんので覚えておくといいです。

投稿2017/09/13 11:13

MasakiHori

総合スコア3384

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

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

0

ちなみにsetImageのURL部分には、以下が入ってるのをビルド時のbreak pointで確認しています。

https://firebasestorage.googleapis.com/v0/b/fbtest-5e29a.appspot.com/o/profile%2FzIPza6a05Wa3kylSPVl36lVIZB82.jpg?alt=media&token=14eade99-192e-4774-bee6-227d7d7d5dfd

投稿2017/09/13 10:05

yukky05

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問