我已经查看了这个问题以及其他几个问题,并确保我的班级通过身份检查员和连接检查员进行连接。我的课程也通过助理编辑器中的自动模式显示。
if let currentUser = FIRAuth.auth()?.currentUser {
ref = FIRDatabase.database().reference()
ref.child("Teams").child(self.teamName.text!).setValue(["Name" : self.teamName.text!])
ref.child("Teams").child(self.teamName.text!).setValue(["Number" : self.teamNumber.text!])
ref.child("Teams").child(self.teamName.text!).setValue(["Password" : self.teamPassword.text!])
ref.child("Teams").child(self.teamName.text!).setValue(["memberCount" : 1])
print("1")
let userName = "member" + String(1)
let currentUserEmail = currentUser.uid
ref.child("Teams").child(self.teamName.text!).child("memberList").setValue([userName : currentUserEmail])
print("2")
if let userteamcount = self.ref.child("Users").child(currentUser.uid).value(forKey: "teamCount") as? Int {
let currentTeam = "team" + String(userteamcount + 1)
print("4")
self.ref.child("Users").child(currentUser.uid).setValue(["teamCount" : (userteamcount + 1)])
print("5")
self.ref.child("Users").child(currentUser.uid).child("joinedTeams").setValue([currentTeam : self.teamNumber.text!])
print("6")
}
}
一个重要的注意事项是它在发送错误之前打印出1和2.
此外,这是我得到的具体错误:
1
2
Terminating app due to uncaught exception 'NSUnknownKeyException', reason:
'[<FIRDatabaseReference 0x618000054160> valueForUndefinedKey:]:
this class is not key value coding-compliant for the key teamCount.'
非常感谢。
答案 0 :(得分:2)
self.ref.child("Users").child(currentUser.uid).value(forKey: "teamCount") as? Int
您无法从DB中获取值。您需要观察引用以获取值。但似乎你试图增加一个值,所以你应该使用一个事务来做到这一点。因为如果你不这样做,当两个用户试图同时递增它时,一个人的改变很可能会覆盖另一个(个人而言,我发现它也更具可读性)。这是怎么回事。
self.ref.child("Users").child(currentUser.uid).child("teamCount").runTransactionBlock({ (currentData: FIRMutableData) -> FIRTransactionResult in
var teamCount = currentData.value as? Int
if teamCount != nil {
currentData.value = teamCount + 1
}
return FIRTransactionResult.success(withValue: currentData)
}) { (error, committed, snapshot) in
if error == nil {
// Update joinedTeams here
let value = snapshot.value as? Int
let currentTeam = "team\(value)"
self.ref.child("Users").child(currentUser.uid).child("joinedTeams").child(currentTeam).setValue(self.teamNumber.text!)
}
}
以下是您在没有交易的情况下通常从数据库加载teamCount的方法。
self.ref.child("Users").child(currentUser.uid).child("teamCount").observeSingleEvent(.value, with: { dataSnapshot in
let teamCount = dataSnapshot.value as? Int
})
我没有测试过代码,但我认为它应该可行。
链接: