У меня проблема с отображением топ-пользователей в таблице лидеров с помощью целочисленного значения, называемого «рейтинг», для запроса я использую 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.
Есть идеи?