У меня есть UITableView
, где все детали из узла root->Data
успешно извлекаются. Я пытаюсь реализовать SearchController
для фильтрации данных, но, похоже, он не извлекает результаты поиска и не связывает их с UITableView
.
Моя структура Firebase JSON выглядит следующим образом:
"Data" : {
"01" : {
"priority" : 2,
"search" : "school centre",
"title" : "School Centre"
},
Вот код из updateSearchResults
:
func updateSearchResults(for searchController: UISearchController) {
filterContent(searchText: self.searchController.searchBar.text!.lowercased())
}
func filterContent(searchText:String)
{
if (searchText.count == 0){
observePosts()
} else {
print(searchText)
observeSearchPosts(searchText: searchText)
}
}
Единственная разница между observePosts
и observeSearchPosts
заключается в справочной строке базы данных:
func observeSearchPosts(searchText: String) {
let postsRef = Database.database().reference().child("Data").queryOrdered(byChild: "search").queryStarting(atValue: searchText)
print(postsRef)
postsRef.observe(.value, with: { snapshot in
var tempPosts = [Post]()
for child in snapshot.children{
if let childSnapshot = child as? DataSnapshot,
let dict = childSnapshot.value as? [String:Any],
let title = dict["title"] as? String,
let logoImage = dict["image"] as? String,
let url = URL(string:logoImage),
let address = dict["address"] as? String,
let contact = dict["contact"] as? String,
let description = dict["description"] as? String{
let userProfile = UserProfile(title: title, photoURL: url)
let post = Post(id: childSnapshot.key, title: userProfile, description: description, image: userProfile, address: address, contact: contact)
print(post)
tempPosts.append(post)
}
}
self.posts = tempPosts
self.tableView.reloadData()
})
}
В observePosts
ссылка на базу данных let postsRef = Database.database().reference().child("Data").queryOrdered(byChild: "priority")
.