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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

562閲覧

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value が取れません。

takuya_22

総合スコア12

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2018/08/10 06:18

編集2018/08/11 04:37

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
swiftでsnsを作っています。
ユーザー追加機能を実装中に以下のエラーメッセージが発生しました。

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

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

swift4

1import UIKit 2 3class PeopleViewController: UIViewController { 4 5 @IBOutlet weak var tableView: UITableView! 6 7 var users = [UserModel]() 8 var userUid = "" 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 tableView.dataSource = self 14 tableView.tableFooterView = UIView(frame: .zero) 15 tableView.rowHeight = 80 16 17 loadUser() 18 } 19 20 func loadUser() { 21 UserApi.shared.observeUser { (user) in 22 self.isFollowing(userUid: user.uid!, completed: { (value) in 23 if user.uid != UserApi.shared.CURRENT_USER_UID! { 24 user.isFollowing = value 25 self.users.append(user) 26 self.tableView.reloadData() 27 } 28 }) 29 } 30 } 31 32 33 func isFollowing(userUid: String, completed: @escaping (Bool) -> Void ) { 34 FollowApi.shared.isFollowing(withUser: userUid, completed: completed) 35 36 } 37 38 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 39 if segue.identifier == "ShowUserInfoSegue" { 40 let showUserInfoVC = segue.destination as! ShowUserinfoViewController 41 showUserInfoVC.userUid = self.userUid 42 } 43 } 44} 45 46extension PeopleViewController: PeopleCellDelegate { 47 48 func didTappedShowUserInfo(userUid: String) { 49 self.userUid = userUid 50 performSegue(withIdentifier: "ShowUserInfoSegue", sender: self) 51 } 52} 53 54 55 extension PeopleViewController: UITableViewDataSource { 56 57 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 58 return users.count 59 } 60 61 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 62 let cell = tableView.dequeueReusableCell(withIdentifier: "PeopleTableViewCell", for: indexPath) as! PeopleTableViewCell 63 64 cell.user = users[indexPath.row] 65 cell.delegate = self 66 67 return cell 68 69 } 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85}
import Foundation import FirebaseDatabase import FirebaseAuth class UserApi { var REF_USERS = Database.database().reference().child("users") static var shared: UserApi = UserApi() private init() { } var CURRENT_USER_UID: String? { if let currentUserUid = Auth.auth().currentUser?.uid { return currentUserUid } return nil } var CURRENT_USER: User? { if let currentUserUid = Auth.auth().currentUser { return currentUserUid } return nil } func observeUser(uid: String, completion: @escaping (UserModel) -> Void) { REF_USERS.child(uid).observeSingleEvent(of: .value) { (snapshot) in guard let dic = snapshot.value as? [String: Any] else { return } let newUser = UserModel(dictionary: dic) completion(newUser) } } func observeUser(completion: @escaping (UserModel) -> Void ) { REF_USERS.observe(.childAdded) { (snapshot) in guard let dic = snapshot.value as? [String: Any] else { return } let user = UserModel(dictionary: dic) completion(user) } } func observeCurrentUser(completion: @escaping (UserModel) -> Void ) { guard let currentUserUid = CURRENT_USER_UID else { return } REF_USERS.child(currentUserUid).observeSingleEvent(of: .value) { (snapshot) in guard let dic = snapshot.value as? [String: Any] else { return } let currentUser = UserModel(dictionary: dic) completion(currentUser) } } func queryUser(withText text: String, completion: @escaping(UserModel) -> Void ) { REF_USERS.queryOrdered(byChild: "username_lowercase").queryStarting(atValue: text).queryEnding(atValue: text + "\u{f8ff}").queryLimited(toLast: 5).observeSingleEvent(of: .value) { (snapshot) in snapshot.children.forEach({ (data) in let child = data as! DataSnapshot guard let dic = child.value as? [String: Any] else { return } let user = UserModel(dictionary: dic) completion(user) }) } } }

試したこと

https://stackoverflow.com/questions/50544358/how-can-i-fix-thread-1-fatal-error-unexpectedly-found-nil-while-unwrapping-an
https://learnappmaking.com/found-nil-while-unwrapping-optional-value/
色々なサイトをみて検討したのですが、うまくいかず、ユーザー情報がうまく取り出せていないのではと思っています。

補足情報(FW/ツールのバージョンなど)

他にも足りない情報とかがあれば随時追加せせていただきます。swiftを始めて3週間なのでわからないことの方が多いので、具体的なコードなどで教えていただけるとありがたいです。
イメージ説明

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

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

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

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

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

fuzzball

2018/08/10 06:29

「ユーザー情報がうまく取り出せていないのではと思っています」←取り出せていないのではなく、取得できていないのだと思います。ユーザ情報を取得しているコードを書いて下さい。
takuya_22

2018/08/10 07:02

すいませんこれで大丈夫かと思うんですがどうでしょうか?
fuzzball

2018/08/10 07:14

コードは ``` で囲って下さい。
takuya_22

2018/08/10 07:22

何から何まですいません!使い方を全く理解せずに投稿していました、ご指摘ありがとうございます。
fuzzball

2018/08/10 07:40

user.uidに値を入れているところを見たいのですが。
takuya_22

2018/08/10 10:11

追加しました!
guest

回答1

0

自己解決

投稿2018/08/12 10:32

takuya_22

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問