Я создал «умный» поиск пользователей для поиска контента, созданного другими пользователями, в моем приложении, который автоматически завершает их поиск, но по какой-то причине, если я возвращаюсь назад, он возвращает результаты несколько раз. Это также происходит, если я возвращаюсь назад и снова набираю последнюю букву. Должен ли я проверять, содержит ли posts
текст поиска? Любая помощь в устранении этой проблемы очень ценится!
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty {
//Show recent users
handleRefresh()
} else {
fetchPosts(searchText: searchText)
}
self.collectionView.reloadData()
}
func handleRefresh() {
posts.removeAll()
self.collectionView.reloadData()
}
fileprivate func fetchPosts(searchText: String) {
self.collectionView.refreshControl?.endRefreshing()
let ref = Database.database().reference().child("posts").queryOrdered(byChild: "title").queryStarting(atValue: searchText).queryEnding(atValue: "\(searchText)\\uf8ff").queryLimited(toLast: 20)
ref.observeSingleEvent(of: .value) { (snapshot) in
guard let dictionaries = snapshot.value as? [String: Any] else { return }
dictionaries.forEach({ (key, value) in
guard let postDictionary = value as? [String: Any] else { return }
guard let uid = postDictionary["uid"] as? String else { return }
Database.fetchUserWithUID(uid: uid, completion: { (user) in
let post = Post(postId: key, user: user, dictionary: postDictionary)
let nowTimeStamp = Date().timeIntervalSince1970
let dateTime = post.endTimeDate
let timeStamp = dateTime.timeIntervalSince1970
if nowTimeStamp < timeStamp {
post.id = key
self.posts.append(post)
} else {
return
}
})
self.posts.sort(by: { (post1, post2) -> Bool in
return post1.title.compare(post2.title) == .orderedAscending
})
self.collectionView.reloadData()
})
}
}