前提・実現したいこと
firestoreのドキュメント内のmusicNameフィールドの情報とsearchBarの文字が部分一致しているデータをtableViewに表示したい。
初心者で説明が不十分かもしれませんが、ご回答よろしくお願い致します。
発生している問題・エラーメッセージ
whereField("musicName", arrayContains: seachBar.text!).getDocumentと書いたが取得できない。
該当のソースコード
swift
1func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 2 3 if searchBar.text == "" { 4 showAllData() 5 }else{ 6 self.timeLines.removeAll() 7 timeLineRef.whereField("musicName", arrayContains: seachBar.text!).getDocuments { (querySnapshot, error) in 8 if error != nil{ 9 return 10 }else{ 11 self.seachedtimeLines = querySnapshot!.documents.map { document in 12 let data = TimeLineModel(document: document) 13 14 return data 15 } 16 } 17 } 18 self.tableView.reloadData() 19 } 20 21 } 22 23 24 override func viewWillAppear(_ animated: Bool) { 25 super.viewWillAppear(animated) 26 27 showAllData() 28 } 29 30 func showAllData() { 31 timeLineRef.getDocuments { (querySnapshot,error) in 32 self.timeLines.removeAll() 33 34 if error != nil { 35 return 36 } 37 self.timeLines = querySnapshot!.documents.map { document in 38 let data = TimeLineModel(document: document) 39 self.timeLines.insert(data, at: 0) 40 return data 41 } 42 } 43 self.tableView.reloadData() 44 } 45 46 47 // MARK: - Table view data source 48 override func numberOfSections(in tableView: UITableView) -> Int { 49 return 1 50 } 51 52 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 53 if self.seachBar.text == "" { 54 return timeLines.count 55 }else{ 56 return seachedtimeLines.count 57 } 58 59 } 60 61 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 62 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TimeLineCell 63 if seachBar.text == "" { 64 cell.timeLineModel = self.timeLines[indexPath.row] 65 }else{ 66 cell.timeLineModel = self.seachedtimeLines[indexPath.row] 67 } 68 return cell 69 } 70 71 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 72 73 let selectedCell = tableView.cellForRow(at: indexPath) 74 75 if seachBar.text == ""{ 76 let selectedTimeLine = timeLines[indexPath.row] 77 performSegue(withIdentifier: "detail", sender: selectedTimeLine) 78 }else{ 79 let selectedTimeLine = seachedtimeLines[indexPath.row] 80 performSegue(withIdentifier: "detail", sender: selectedTimeLine) 81 } 82 83 } 84
試したこと
isEqualToを使用した場合は上手く表示されました。
あなたの回答
tips
プレビュー