ios - Firestore 查询不返回基于 searchText 的数据
问题描述
我的 searchBar 文本正在更新我的查询,但没有像我预期的那样从 Firestore 返回数据。
这是我的数据模型中的方法:
func getMealPlans(starred starredOnly:Bool = false, textToQuery searchText:String = "") {
listener?.remove()
let db = Firestore.firestore()
var query:Query = db.collection("mealPlans")
query = query.whereField("title", isGreaterThanOrEqualTo: searchText)
func queryData() {
self.listener = query.addSnapshotListener({ (snapshot, error) in
// Check for errors
if error == nil && snapshot != nil {
var mealPlans = [MealPlan]()
// Parse documents into mealPlans
for doc in snapshot!.documents {
let m = MealPlan(
docID: doc["docID"] as? String,
title: doc["title"] as! String)
mealPlans.append(m)
}
// Call the delegate and pass back the notes in the main thread
DispatchQueue.main.async {
self.delegate?.mealPlansRetrieved(mealPlans: mealPlans)
}
}
})
}
queryData()
}
这是我的视图控制器中的搜索栏方法:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
let searchedText = searchText.lowercased()
model.getMealPlans(textToQuery: searchedText)
self.tableView.reloadData()
}
我想知道query = query.whereField("title", isGreaterThanOrEqualTo: searchText)
我的模型中是否可能是我问题的根源。当我print(searchText)
在此代码之后searchText
,我键入的内容按预期显示在控制台中。但是表格视图不会随着具有匹配 title
的单元格更新,即使它是完全匹配的。
解决方案
You need to use document data property to load MealPlan. Better make it the following way:
1. Define data model as Codable:
import Foundation
import FirebaseFirestore
import FirebaseFirestoreSwift
struct MealPlan: Codable {
@DocumentID var id: String?
title: String?
}
2. Then use compact map to get mealPlans:
mealPlans = snapshot.documents.compactMap { document -> MealPlan? in
do {
let result = try document.data(as: MealPlan.self)
return result
}
catch {
print(error)
return nil
}
}
推荐阅读
- mysql - 如何从 TAGS 列中检索单个标签?
- c - 在 C 中一次读取一个字节的文件效率如何?
- firebase - Firebase 函数从存储中获取文件
- javascript - 函数变量作为对象字段选择器
- mocking - mockito-mocked 服务不返回 true,总是返回 false
- python-imaging-library - 图像的 DPI 信息究竟存储在哪里(Exif 除外)?
- spring-boot - 如何为 Springboot H2 数据源启用 XA?
- reactjs - 来自 stacknavigator 的 tabnavigator 的转换屏幕
- arrays - 从列表列表中获取具有条件递增元素顺序的新列表
- java - 无法从 autocompletebubbletext 获取字符串