我正在试着把排行榜放在一起。它工作得很好,除了当我在我的设备上创建我的应用程序的新版本时,当玩家将他们的分数添加到数据库中时,没有问题。然而,当玩家点击查看排行榜时。所有的结果都以正确的顺序显示,但是玩家的新分数被放在最上面(即使它不是最高分数)。然后在正确的位置再次看到相同的分数。
这只会在第一次构建新版本时发生。如果我返回并再次播放它,顺序是好的,并且分数只被放在正确的位置。
我已经尝试在用户开始新的构建时向数据库添加一个虚拟分数,以模拟排行榜上的一个位置作为位置持有者。但这会被添加到排行榜的顶部,以及他们的新分数(无论它是不是最高分数)。
var scoresArray = [ScoreClass]()
class ScoreClass {
var name = ""
var score = 0
init(withName: String, andScore: Int) {
name = withName
score = andScore
}
}
正在将数据添加到数据库...
func addingScoreToFB() {
let score = Int(self.recentScores.last ?? "")
if score ?? 0 > Int(playerHighScore ?? "") ?? 0 { {
if let username = usernameText {
let newScore = TopScore(username: username, highScore: (score)!)
var ref:DocumentReference? = nil
ref = self.db.collection("users").addDocument(data: newScore.dictionary) {
error in
if let error = error {
print("Error adding document:\(error.localizedDescription)")
} else {
print("Document added with reference: \(ref!.documentID)")
}
}
}
}
}
检索数据
let ref = Database.database().reference()
func retrieveUserData() {
let postsRef = self.db.collection("users")
let query = postsRef
.order(by: "highScore", descending: true)
.limit(to: 50)
query.addSnapshotListener { (documentSnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in documentSnapshot!.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()
}
}
}
我不确定数据库检索是否有任何问题,但我不明白为什么这只会在第一次游戏中重新构建时受到影响。我们将非常感谢您提供的任何帮助。
编辑:包括tableView显示功能和scoreObject
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.reversed()[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
}
https://stackoverflow.com/questions/56415819
复制相似问题