初めてFirebaseを用いてSNS系アプリを作ろうとしてます。今回はテストなので検索窓から全てのユーザーのアカウントをtableviewで表示させ、tableview cellをタップすると画面遷移してユーザーのプロフィールページにとび、名前やプロフィールを表示させようとしています。
問題点
Stringでユーザー名を画面遷移時に渡しており、print()を使って画面遷移先のviewdidloadで渡されたユーザー名を確認すると正常に渡されていることが確認されました。しかし、それを用いてnameLabel.text に代入して画面遷移先のユーザーの名前を表示するラベルには表示されません。
試したこと
画面遷移時にユーザー固有のIDも一緒に渡しCloud Firestoreから固有のIDをもとにデータを取り出そうと考えたのですがこれもうまくいきませんでした。
下のコードのこの部分で条件分岐の全てがelseに流れたのにおかしさを感じましたが原因がわかりませんでした。
よろしくお願いします。
db.collection("users").getDocuments() { (querySnapshot, error) in if let error = error { print(error) } else { for document in querySnapshot!.documents { if document.documentID == self.passedUserId{ print("yayayaya") print(self.passedUserId) }else{ print(self.passedUserId) print("nononono") } print("(document.documentID) => (document.data())") } } }
画面遷移はSearchViewController.swift→DetailViewController.swiftです
DetailViewController.swift
import UIKit import NCMB import SCLAlertView import FirebaseFirestore import FirebaseAuth import FirebaseStorage class DetailViewController: UIViewController, UITextViewDelegate { @IBOutlet var nameLabel: UILabel! var passedUserName = String() var passedUserId = String() override func viewDidLoad() { nameLabel.text = String(passedUserName) print(passedUserName) print(passedUserId) let db = Firestore.firestore() db.collection("users").getDocuments() { (querySnapshot, error) in if let error = error { print(error) } else { for document in querySnapshot!.documents { if document.documentID == self.passedUserId{ print("yayayaya") print(self.passedUserId) }else{ print(self.passedUserId) print("nononono") } print("(document.documentID) => (document.data())") } } } /* let document = db.collection("users") document.getDocuments { (snapshot, error) in if error != nil{ print(error) }else{ print(snapshot?.documents) } } */ /* let document = db.collection("users").document(passedUserId) document.getDocument { (snapshot, error) in if error != nil { print(error) }else{ print("ああああああああ") } } */ } override func viewWillAppear(_ animated: Bool) { nameLabel.text = passedUserName } func loadDetail(){ } }
修正後
SearchViewController.swift
import UIKit import NCMB import Kingfisher import PKHUD import FirebaseAuth import FirebaseFirestore class SearchViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{ var allUsers = [String]() var allUsersId = [String]() var selectedUser = String() var selectedUserId = String() @IBOutlet var searchUserTableView: UITableView! let db = Firestore.firestore() var yay = ["月曜日", "火曜日", "水曜日"] override func viewDidLoad() { super.viewDidLoad() print("1") searchUserTableView.dataSource = self searchUserTableView.delegate = self searchUserTableView.tableFooterView = UIView() loadUsers() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) } func loadUsers(){ db.collection("users").getDocuments(){ (querySnapshot, err) in if let err = err { print(err) } else { for document in querySnapshot!.documents{ //print(document.documentID) let idForDocument = document.documentID self.allUsersId.append(idForDocument) print(self.allUsersId) let docRef = self.db.collection("users").document(idForDocument) docRef.getDocument { (snapshot, error) in if error != nil{ print(error) }else{ //print(snapshot?.data()) let userName = snapshot?.get("userName") as! String print(userName) self.allUsers.append(userName) print("aaaaaaaaaaaaaaaaa") print(self.allUsers) print("2") self.searchUserTableView.reloadData() } } } } } } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { print("3") return allUsers.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! cell.textLabel?.text = allUsers[indexPath.row] print("4") cell.tag = indexPath.row return cell } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "toDetail"{ let detailViewController = segue.destination as! DetailViewController detailViewController.passedUserName = selectedUser detailViewController.passedUserId = selectedUserId print("11111") } } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let selectedUser = allUsers[indexPath.row] let selectedUserId = allUsersId[indexPath.row] print(selectedUser) print(selectedUserId) print("222222") performSegue(withIdentifier: "toDetail", sender: nil) print("333333") tableView.deselectRow(at: indexPath, animated: true) print("444444") }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/09/12 01:44
2020/09/12 03:08
退会済みユーザー
2020/09/12 07:12