当前无法显示我的Firebase实时数据库中的所有高分。目前,我只显示“实时”得分。
我目前正在制作一个记分板,在表格中显示前50个得分及其用户名。这很好。但是,我不确定是否应该使用实时数据库。
您看到的是,当我在物理设备上进行全新构建并创建新用户时,该用户将保存到Firebase数据库中,当我达到新分数并显示高分用户时,我的新用户就正确地存在和他们的分数。
如果我注销(但仍在应用程序中)并向新用户注册,然后再次与新用户一起玩,然后单击以再次查看高分排行榜,我现在可以看到两个我创建的用户及其得分。很棒!
我可以检查firebase的“身份验证”部分,并且可以肯定的是,我的用户在其中带有他们的电子邮件和密码等。并且我可以在实时数据库中检查他们的高分。一切都很好。
但是,当我从设备中删除该应用程序甚至将其推入后台,然后重新构建时,或重新打开该应用程序。身份验证详细信息(密码,用户名,电子邮件)仍然存在,但是当我打开实时数据库时,那里没有数据。
因此,当我单击查看最高得分排行榜时,没有任何显示。这是因为我不应该使用实时数据库,而是仅显示“实时/最新数据”,而实际上并没有永久存储我想要的数据。我应该使用SQL还是其他?
这是将我的高分添加到数据库中的代码……
func addingScoreToFB() {
let currentUser = Auth.auth().currentUser
let highScore = UserDefaults.standard.integer(forKey: highScoreIdentifier)
let recentScore = UserDefaults.standard.integer(forKey: recentScoreIdentifier)
if let userID = currentUser?.uid {
let userDB = Database.database().reference().child("Users").child(userID)
if recentScore > highScore {
let highSDictionary = ["highScore":self.recentScores.last!]
userDB.updateChildValues(highSDictionary as Any as! [AnyHashable : Any], withCompletionBlock: { (err, ref) in // Adding Score
if let err = err {
print(err)
}
})
}
}
}
这是我显示分数的代码.....
func retrieveUserData() {
let postsRef = self.ref.child("Users")
let query = postsRef.queryOrdered(byChild: "highScore").queryLimited(toLast: 50)
query.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children {
let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]
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()
})
}
总而言之,我希望能够一直查看数据库中每个用户的前50名得分,但目前我仅在新版本中看到最近的得分。