前提・実現したいこと
ここに質問の内容を詳しく書いてください。
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週間なのでわからないことの方が多いので、具体的なコードなどで教えていただけるとありがたいです。
回答1件
あなたの回答
tips
プレビュー