Быстрый поиск из Firebase, только обновляя collectionView один раз - PullRequest
1 голос
/ 18 октября 2019

У меня есть панель поиска, которая ищет имена пользователей из моей базы данных Firebase. Он отлично работает, но работает только один раз. Например, если я введу «Test», все результаты для «Test» появятся, но если я продолжу вводить тестирование, и collectionView не ограничивает себя, чтобы показывать только результаты для нового запроса, он по-прежнему показывает всестарые данные, несмотря на то, что я вызываю collectionView.reloadData.

Примечание: если я распечатываю снимок в fetchUsers, он вызывается и возвращает правильный снимок (ы)

fileprivate func fetchUsers(username: String) {
    let ref = Database.database().reference().child("users").queryOrdered(byChild: "username").queryStarting(atValue: username).queryEnding(atValue: "\(username)\u{f8ff}")
    ref.observeSingleEvent(of: .value) { (snapshot) in
        guard let dictionaries = snapshot.value as? [String: Any] else { return }
        dictionaries.forEach({ (key, value) in

            if key == Auth.auth().currentUser?.uid {
                return
            }

            guard let userDictionary = value as? [String: Any] else { return }

            let user = User(uid: key, dictionary: userDictionary)

            if self.fetchedUserIds.contains(key) {
                return
            } else {
                self.users.append(user)
                self.fetchedUserIds.append(key)
            }
        })

        self.users.sort(by: { (user1, user2) -> Bool in
            return user1.username.compare(user2.username) == .orderedAscending
        })

        self.collectionView?.reloadData()
    }
}

Функция панели поиска

   func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

    if searchText.isEmpty {
        self.fetchedUserIds.removeAll()
        self.users.removeAll()
        self.filteredUsers.removeAll()
    } else  {
        fetchUsers(username: searchText)
    }

    self.collectionView.reloadData()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...