首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TableView在顶部添加来自firestore的newScore,即使它不是最高分数

TableView在顶部添加来自firestore的newScore,即使它不是最高分数
EN

Stack Overflow用户
提问于 2019-06-02 22:10:14
回答 2查看 72关注 0票数 0

我正在试着把排行榜放在一起。它工作得很好,除了当我在我的设备上创建我的应用程序的新版本时,当玩家将他们的分数添加到数据库中时,没有问题。然而,当玩家点击查看排行榜时。所有的结果都以正确的顺序显示,但是玩家的新分数被放在最上面(即使它不是最高分数)。然后在正确的位置再次看到相同的分数。

这只会在第一次构建新版本时发生。如果我返回并再次播放它,顺序是好的,并且分数只被放在正确的位置。

我已经尝试在用户开始新的构建时向数据库添加一个虚拟分数,以模拟排行榜上的一个位置作为位置持有者。但这会被添加到排行榜的顶部,以及他们的新分数(无论它是不是最高分数)。

代码语言:javascript
运行
复制
var scoresArray = [ScoreClass]()

class ScoreClass {

    var name = ""
    var score = 0

    init(withName: String, andScore: Int) {
        name = withName
        score = andScore
    }
}

正在将数据添加到数据库...

代码语言:javascript
运行
复制
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)")
                }
            }
        }
    }
}

检索数据

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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
}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56415819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档