【问题标题】:Order a Firebase database and then iterate through and update an item with Xcode订购 Firebase 数据库,然后使用 Xcode 迭代和更新项目
【发布时间】:2018-11-02 08:56:30
【问题描述】:

我有一个关于 Firebase 的问题。即将建立排行榜数据库。 所以我的问题是:是否可以先按子“分数”对数据库进行排序,然后遍历此特定顺序并同时更新数据库中的子“排名”?

这是数据库的方案:

https://i.imgur.com/LxRymVx.png

目前找不到任何解决方案。谢谢

【问题讨论】:

  • 你能提供你的firebase数据库方案吗?
  • @DionizB:我添加了该方案的截图
  • 您是在问如何做到这一点,或者这是否可行?
  • @DionizB:我在问,这是否可行。如果可能的话,我会感谢一些提示/代码示例,因为我没有得到它。

标签: swift xcode firebase firebase-realtime-database


【解决方案1】:

首先你需要声明你的数据库引用:

let ref = Database.database().reference(withPath: "Leaderboard")

那么你需要在这里做一个简单的查询,并访问查询上的元素:

ref.queryOrdered(byChild: "Score").observe(.value, with: { (snapshot) in
    for (index, child) in snapshot.children.enumerated {
        if let leaderboardSnapshot = child as? DataSnapshot, let leaderBoardValues = leaderboardSnapshot.value as? [String: Any]  { 
            // here you should update your children
            let values = ["Name": (leaderBoardValues["Name"] as? String) ?? " ", "Ranking": index, "Score":  (leaderBoardValues["Score"] as? Int) ?? 0] 
            ref.child(leaderboardSnapshot.key).updateChildValues(values, withCompletionBlock: { (error, ref) in
                        // check for error here if you want
            })
        }
    }
}

【讨论】:

  • 非常好的方法。我不得不将 FIRDataSnapshot 重命名为 DataSnapshot 并将 leaderboardDictionary.key 重命名为 leaderboardDictionary.keys 以阻止 Xcode 哭泣。但是我的字典还有一些问题??? i.imgur.com/tcuYnK9.png
  • 使用你的新代码,我得到了这个结果:i.imgur.com/d69L28d.png。但我的目标是,数据库最后看起来像这样:i.imgur.com/pcgLvUx.png。并且排名计数器仍然存在问题,它不是每次点击都起床。
  • 使用编辑后的答案,我更新了代码以满足您的需求
  • 不幸的是,新代码没有向数据库写入任何内容:(
  • 你能做任何打印或调试看看为什么它不写任何东西吗?因为理论上它应该更新你的排名值
猜你喜欢
  • 2018-11-12
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
相关资源
最近更新 更多