Запрос Firebase размещает текущего вошедшего в систему пользователя первым независимо от фактического ранга до обновления страницы - PullRequest
0 голосов
/ 09 июня 2018

У меня проблема с отображением топ-пользователей в таблице лидеров с помощью целочисленного значения, называемого «рейтинг», для запроса я использую fetchUsers, вызванный viewDidLoad():

func fetchUsers() {
        userModel.removeAll()
        let queryRef = Database.database().reference().child("users").queryOrdered(byChild: "ranking").queryLimited(toLast: 49)
        queryRef.observe(.childAdded, with: { (snapshot) in

            if let dictionary = snapshot.value as? [String : AnyObject]{
                let user = User(dictionary: dictionary)
                print(user.username)
                print(user.ranking)
                self.userModel.append(user)
            }
            DispatchQueue.main.async(execute: {
                self.leaderboardTableView.reloadData()
            })
        })
    }

Поэтому, если у меня есть база данных с этими значениями, и я вошел как user1:

users {
    user1: 
        ranking: 9999874
    user2:
        ranking: 9999752
    user3:
        ranking: 9999999
}

, я вижу это распечатанным в моей консоли (я добавил оператор печати в запросе), что неверно

user1
9999874 <<<< this is not the smallest number!
user2
9999752
user3
9999999

но если я вернусь и снова нажму на таблицу лидеров, она перезагрузится и покажет:

user2
9999752
user1
9999874
user3
9999999

Правильно!

НО ПОЧЕМУ.Вот мой код tableView для отображения:

let cell = tableView.dequeueReusableCell(withIdentifier: "leaderboardTableCell", for: indexPath) as! LeaderboardTableCell
        if userModel.count > indexPath.row {
            if let profileImageURL = userModel[indexPath.row].photoURL {
                //photo options removed for brevity
                Nuke.loadImage(
                    with: ImageRequest(url: url).processed(with: _ProgressiveBlurImageProcessor()),
                    options: options,
                    into: cell.userImage
                )
            }
        }
        cell.userName.text = userModel[indexPath.row].username
        cell.watchTime.text = "\(String(describing: userModel[indexPath.row].watchTime!))"
        cell.ranking.text = "\(indexPath.row + 1)"

И пример gif, показывающий эту проблему.

CASE: вошел в систему как appledev Я иду: profileVC -> LeaderboardVC -> Наблюдать за неправильным рейтингом ->вернуться в profileVC -> снова открыть LeaderboardVC, и он работает волшебным образом.

Что-то странное в том, что это отлично работает на моем homeVC и если запрос ограничен 10.

Есть идеи?

enter image description here

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