以下の記事をもとにFirestoreのデータをTableviewに表示させようとしています。
https://note.com/shion_consul/n/n6a194378c0e3
以下の流れでコードを書いたのですが、TableViewに何も表示されません。
- TableViewControllerのviewDidLoad()でコンソールからデータを取得する関数getData()を実行
- データモデルを定義したカスタムクラスItemがインスタンス化され、データを格納するための変数itemsに代入
- 検索した場合の検索後に表示されるデータcurrentItemsにitemsのデータを代入
セルにcurrentItemsのデータをセット
カスタムデータモデルクラスItems
import UIKit import FirebaseFirestore class Item: NSObject { var registrationTime: String var name: String var price: String var impression: String var rating: Int init(document: QueryDocumentSnapshot) { let Dic = document.data() self.registrationTime = Dic["registrationTime"] as! String self.name = Dic["name"] as! String self.price = Dic["price"] as! String self.impression = Dic["impression"] as! String self.rating = Dic["rating"] as! Int } }
TableViewController
import UIKit import FirebaseFirestore class ItemTableViewController: UITableViewController, UISearchBarDelegate{ @IBOutlet weak var search: UISearchBar! var items = [Item]() var currentItems = [Item]() override func viewDidLoad() { super.viewDidLoad() search.delegate = self search.enablesReturnKeyAutomatically = false // Firestoreからデータ取得 getData() // 検索後のデータに当てはめる currentItems = items } override func numberOfSections(in tableView: UITableView) -> Int { return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return currentItems.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? ItemTableViewCell else { fatalError("セルのダウンキャストに失敗しました") } let item = currentItems[indexPath.row] cell.registrationTimeText.text = item.registrationTime cell.itemNameText.text = item.name return cell } // データ取得 func getData() { let Ref = Firestore.firestore().collection("users") // コレクション指定 Ref.getDocuments() { (querySnapshot, error) in if let error = error { print(error) return } self.items = querySnapshot!.documents.map { document in let item = Item(document: document) return item } } } // 検索処理 func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { guard !searchText.isEmpty else { currentItems = items tableView.reloadData() return } currentItems = items.filter({ item -> Bool in item.name.lowercased().contains(searchText.lowercased()) }) tableView.reloadData() } // 検索ボタンをタップしたらキーボードが下がる func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { searchBar.resignFirstResponder() } }
他に確認する事項があればご教授ください。
宜しくお願いします。
回答1件
あなたの回答
tips
プレビュー