Быстрый поиск по базе данных, возвращающий несколько одинаковых объектов - PullRequest
0 голосов
/ 17 октября 2019

Я создал «умный» поиск пользователей для поиска контента, созданного другими пользователями, в моем приложении, который автоматически завершает их поиск, но по какой-то причине, если я возвращаюсь назад, он возвращает результаты несколько раз. Это также происходит, если я возвращаюсь назад и снова набираю последнюю букву. Должен ли я проверять, содержит ли 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()
        })
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...