teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

ソースコードとエラーメッセージの修正・追記を行いました。

2019/12/12 03:56

投稿

Nagi7
Nagi7

スコア5

title CHANGED
@@ -1,1 +1,1 @@
1
- Unexpectedly found nil while implicitly unwrapping an Optional valueのエラーを解決したいです
1
+ Unexpectedly found nil while implicitly unwrapping an Optional valueのエラーで困っていま
body CHANGED
@@ -15,7 +15,7 @@
15
15
  ### 発生している問題・エラーメッセージ
16
16
 
17
17
  ```
18
- Unexpectedly found nil while implicitly unwrapping an Optional value
18
+ Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: file /Users/apple/Desktop/Brio/Brio/Main Pages/Controller/RoomViewController.swift, line 293
19
19
  ```
20
20
 
21
21
  ### 該当のソースコード
@@ -23,72 +23,78 @@
23
23
  ```Swift
24
24
 
25
25
  func loadTimeline() {
26
- guard let currentUser = NCMBUser.current() else {
26
+ guard let currentUser = NCMBUser.current() else {
27
- let storyboard = UIStoryboard(name: "SignIn", bundle: Bundle.main)
27
+ let storyboard = UIStoryboard(name: "SignIn", bundle: Bundle.main)
28
- let rootViewController = storyboard.instantiateViewController(withIdentifier:
28
+ let rootViewController = storyboard.instantiateViewController(withIdentifier:
29
- "RootNavigationController")
29
+ "RootNavigationController")
30
- UIApplication.shared.keyWindow?.rootViewController = rootViewController
30
+ UIApplication.shared.keyWindow?.rootViewController = rootViewController
31
31
 
32
- let ud = UserDefaults.standard
32
+ let ud = UserDefaults.standard
33
- ud.set(false, forKey: "isLogin")
33
+ ud.set(false, forKey: "isLogin")
34
- ud.synchronize()
34
+ ud.synchronize()
35
- return
35
+ return
36
- }
36
+ }
37
37
 
38
- let query = NCMBQuery(className: "Post")
38
+ let query = NCMBQuery(className: "Post")
39
-
40
- query?.order(byDescending: "createDate")
41
39
 
42
-
40
+ // 降順
43
- query?.includeKey("user")
41
+ query?.order(byDescending: "createDate")
44
42
 
43
+ // 投稿したユーザーの情報も同時取得
44
+ query?.includeKey("user")
45
+
46
+ // オブジェクトの取得
45
- query?.findObjectsInBackground({ (result, error) in
47
+ query?.findObjectsInBackground({ (result, error) in
46
- if error != nil {
48
+ if error != nil {
47
- SVProgressHUD.showError(withStatus: error!.localizedDescription)
49
+ SVProgressHUD.showError(withStatus: error!.localizedDescription)
48
- } else {
50
+ } else {
49
- self.posts = [Post]()
50
51
 
52
+ // 投稿を格納しておく配列を初期化
53
+ self.posts = [Post]()
54
+
51
- for postObject in result as! [NCMBObject] {
55
+ for postObject in result as! [NCMBObject] {
52
56
 
53
-
57
+ // ユーザー情報をUserクラスにセット
54
- let user = postObject.object(forKey: "user") as! NCMBUser
58
+ let user = postObject.object(forKey: "user") as! NCMBUser
55
59
 
56
-
60
+ // 退会済みユーザーの投稿を避けるため、activeがfalse以外のモノだけを表示
57
- if user.object(forKey: "active") as? Bool != false {
61
+ if user.object(forKey: "active") as? Bool != false {
58
62
 
59
- // 投稿したユーザーの情報をUserモデルにまとめる
63
+ // 投稿したユーザーの情報をUserモデルにまとめる
60
- let userModel = User(objectId: user.objectId, userName: user.userName)
64
+ let userModel = User(objectId: user.objectId, userName: user.userName)
61
- userModel.displayName = user.object(forKey: "displayName") as? String
65
+ userModel.displayName = user.object(forKey: "displayName") as? String
62
66
 
63
- // 投稿の情報を取得
67
+ // 投稿の情報を取得
64
- let imageUrl = user.object(forKey: "imageUrl") as! String
68
+ let imageUrl = user.object(forKey: "imageUrl") as! String
65
69
 
66
- let text = postObject.object(forKey: "text") as! String
70
+ let text = postObject.object(forKey: "text") as! String
67
71
 
72
+ // 2つのデータ(投稿情報と誰が投稿したか?)を合わせてPostクラスにセット
68
- let post = Post(objectId: postObject.objectId, user: userModel, imageUrl: imageUrl, text: text, createDate: postObject.createDate, roomId: "")
73
+ let post = Post(objectId: postObject.objectId, user: userModel, imageUrl: imageUrl, text: text, createDate: postObject.createDate, roomId: "")
69
74
 
70
-
75
+ // likeの状況(自分が過去にLikeしているか?)によってデータを挿入
71
- let likeUsers = postObject.object(forKey: "likeUser") as? [String]
76
+ let likeUsers = postObject.object(forKey: "likeUser") as? [String]
72
- if likeUsers?.contains(currentUser.objectId) == true {
77
+ if likeUsers?.contains(currentUser.objectId) == true {
73
- post.isLiked = true
78
+ post.isLiked = true
74
- } else {
79
+ } else {
75
- post.isLiked = false
80
+ post.isLiked = false
76
- }
81
+ }
77
82
 
78
-
83
+ // いいねの件数
79
- if let likes = likeUsers {
84
+ if let likes = likeUsers {
80
- post.likeCount = likes.count
85
+ post.likeCount = likes.count
81
- }
86
+ }
82
87
 
83
-
88
+ // 配列に加える
84
- self.posts.append(post)
89
+ self.posts.append(post)
85
- }
90
+ }
86
- }
91
+ }
92
+
87
-
93
+ // 投稿のデータが揃ったらTableViewをリロード
88
- self.RoomTableView.reloadData()
94
+ self.RoomTableView.reloadData()
95
+ }
96
+ })
89
97
  }
90
- })
91
- }
92
98
 
93
99
 
94
100
  ```