前提・実現したいこと
SwiftでSNSアプリを開発しています。
ビルドしようとしたらタイムラインのViewControllerに
// 投稿したユーザーの情報をUserモデルにまとめる
let userModel = User(objectId: user.objectId, userName: user.userName)
userModel.displayName = user.object(forKey: "displayName") as? String
// 投稿の情報を取得
let imageUrl = user.object(forKey: "imageUrl") as! String
の部分で以下のエラーが出てきたので、解決をしたいです。
発生している問題・エラーメッセージ
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: file /Users/apple/Desktop/Brio/Brio/Main Pages/Controller/RoomViewController.swift, line 293
該当のソースコード
Swift
1 2func loadTimeline() { 3 guard let currentUser = NCMBUser.current() else { 4 let storyboard = UIStoryboard(name: "SignIn", bundle: Bundle.main) 5 let rootViewController = storyboard.instantiateViewController(withIdentifier: 6 "RootNavigationController") 7 UIApplication.shared.keyWindow?.rootViewController = rootViewController 8 9 let ud = UserDefaults.standard 10 ud.set(false, forKey: "isLogin") 11 ud.synchronize() 12 return 13 } 14 15 let query = NCMBQuery(className: "Post") 16 17 // 降順 18 query?.order(byDescending: "createDate") 19 20 // 投稿したユーザーの情報も同時取得 21 query?.includeKey("user") 22 23 // オブジェクトの取得 24 query?.findObjectsInBackground({ (result, error) in 25 if error != nil { 26 SVProgressHUD.showError(withStatus: error!.localizedDescription) 27 } else { 28 29 // 投稿を格納しておく配列を初期化 30 self.posts = [Post]() 31 32 for postObject in result as! [NCMBObject] { 33 34 // ユーザー情報をUserクラスにセット 35 let user = postObject.object(forKey: "user") as! NCMBUser 36 37 // 退会済みユーザーの投稿を避けるため、activeがfalse以外のモノだけを表示 38 if user.object(forKey: "active") as? Bool != false { 39 40 // 投稿したユーザーの情報をUserモデルにまとめる 41 let userModel = User(objectId: user.objectId, userName: user.userName) 42 userModel.displayName = user.object(forKey: "displayName") as? String 43 44 // 投稿の情報を取得 45 let imageUrl = user.object(forKey: "imageUrl") as! String 46 47 let text = postObject.object(forKey: "text") as! String 48 49 // 2つのデータ(投稿情報と誰が投稿したか?)を合わせてPostクラスにセット 50 let post = Post(objectId: postObject.objectId, user: userModel, imageUrl: imageUrl, text: text, createDate: postObject.createDate, roomId: "") 51 52 // likeの状況(自分が過去にLikeしているか?)によってデータを挿入 53 let likeUsers = postObject.object(forKey: "likeUser") as? [String] 54 if likeUsers?.contains(currentUser.objectId) == true { 55 post.isLiked = true 56 } else { 57 post.isLiked = false 58 } 59 60 // いいねの件数 61 if let likes = likeUsers { 62 post.likeCount = likes.count 63 } 64 65 // 配列に加える 66 self.posts.append(post) 67 } 68 } 69 70 // 投稿のデータが揃ったらTableViewをリロード 71 self.RoomTableView.reloadData() 72 } 73 }) 74 } 75 76
試したこと
オプショナルバインディングの文を書いてみましたが、書き方の理解ができていないこともありエラーの解決にはなりませんでした。