前提・実現したいこと
viewDidLoadでFirebaseから取得したデータを表示させたい。
ログインして次のページに移動した時、移動先のページでviewDidLoadを使用し既にtableViewにデータが表示されている状態にしたい。
発生している問題・エラーメッセージ
viewDidload時にtableViewにデータが表示されていない。 (showAllDataが呼ばれていない?)
該当のソースコード
swift
1 override func viewDidLoad() { 2 super.viewDidLoad() 3 4 showAllData() 5 6 self.tableView.allowsSelection = true 7 seachBar.delegate = self 8 seachBar.showsCancelButton = true 9 seachBar.showsSearchResultsButton = true 10 seachBar.placeholder = "キーワードを入力してください" 11 12 13 } 14 15 func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 16 17 if searchBar.text == "" { 18 showAllData() 19 }else{ 20 self.timeLines.removeAll() 21 timeLineRef.whereField("musicName", isEqualTo: seachBar.text!).getDocuments { (querySnapshot, error) in 22 if error != nil{ 23 return 24 }else{ 25 self.seachedtimeLines = querySnapshot!.documents.map { document in 26 let data = TimeLineModel(document: document) 27 28 return data 29 } 30 } 31 } 32 self.tableView.reloadData() 33 } 34 35 } 36 37 38 override func viewWillAppear(_ animated: Bool) { 39 super.viewWillAppear(animated) 40 41 showAllData() 42 } 43 44 func showAllData() { 45 timeLineRef.getDocuments { (querySnapshot,error) in 46 self.timeLines.removeAll() 47 48 if error != nil { 49 return 50 } 51 self.timeLines = querySnapshot!.documents.map { document in 52 let data = TimeLineModel(document: document) 53 self.timeLines.insert(data, at: 0) 54 return data 55 } 56 } 57 self.tableView.reloadData() 58 } 59}
swift
1 override func numberOfSections(in tableView: UITableView) -> Int { 2 return 1 3 } 4 5 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 6 if self.seachBar.text == "" { 7 return timeLines.count 8 }else{ 9 return seachedtimeLines.count 10 } 11 12 } 13 14 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 15 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TimeLineCell 16 if seachBar.text == "" { 17 cell.timeLineModel = self.timeLines[indexPath.row] 18 }else{ 19 cell.timeLineModel = self.seachedtimeLines[indexPath.row] 20 } 21 return cell 22 } 23 24 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 25 26 let selectedCell = tableView.cellForRow(at: indexPath) 27 28 if seachBar.text == ""{ 29 let selectedTimeLine = timeLines[indexPath.row] 30 performSegue(withIdentifier: "detail", sender: selectedTimeLine) 31 }else{ 32 let selectedTimeLine = seachedtimeLines[indexPath.row] 33 performSegue(withIdentifier: "detail", sender: selectedTimeLine) 34 } 35 36 } 37 38 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 39 40 if segue.identifier == "detail" { 41 42 let detailViewController = segue.destination as! DetailViewController 43 detailViewController.pushedTimeLine = sender as? TimeLineModel 44 } 45 } 46 override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 47 return 82 48 }
補足情報(FW/ツールのバージョンなど)
他の場所でshowAllDataを読んだ場合は表示できます。
あなたの回答
tips
プレビュー