###前提・実現したいこと
プログラミング初心者です。申し訳ないですが教えていただきたく。
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が入っていそうでしたが、ビルドエラーの内容がよくわかっておりません。
対処方法を教えていただけると幸いです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。