Я следовал документации, чтобы создать запрос поиска в моей базе данных, чтобы получить максимальные оценки для отображения в tableView.
Однако приведенный ниже код работает, когда добавляется новая (более высокая оценка)в табличном представлении все еще отображаются старые данные запроса.
Например, у меня в базе данных три лучших результата [121, 131, 134].После первого запроса они отображаются правильно.
Затем я продолжаю играть и добавляю еще несколько очков, [121, 131, 134, 234, 432], но те же результаты отображаются в моем табличном представлении [121, 131, 134].
Я ограничиваю свой дисплей тремя пунктами.Так что это должно действительно показать ..... [134, 234, 432].
Я попытался очистить свой tableView с помощью
scoresArray.removeAll()
topScoresTableView.reloadData()
(Это вызывается, когда я покидаю VC)Но это не имело никакого эффекта.
class ScoreClass {
let db = Firestore.firestore()
var name = ""
var score = 0
init(withName: String, andScore: Int) {
name = withName
score = andScore
}
}
let ref = Database.database().reference()
func retrieveUserData() {
let postsRef = self.db.collection("users")
let query = postsRef
.whereField("highScore", isGreaterThan: 5000)
.order(by: "highScore", descending: false)
.limit(to: 3)
query.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())")
let dict = document.data()
let name = dict["username"] as! String
let score = dict["highScore"] as! Int
let aScore = ScoreClass(withName: name, andScore: score)
self.scoresArray.insert(aScore, at: 0)
}
self.topScoresTableView.reloadData()
}
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.scoresArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = topScoresTableView.dequeueReusableCell(withIdentifier: textCellIdentifier, for: indexPath) as! TableViewCell
let row = indexPath.row
let scoreClassObject = scoresArray[row]
let name = scoreClassObject.name
let score = scoreClassObject.score
cell.backgroundColor = UIColor.clear
cell.usernameLabel.text = name
cell.resultLabel.text = String(score)
cell.rankNumberLabel.text = "\(indexPath.row + 1)"
print(scoresArray)
return cell
}