我是一个相对较新的Swift程序员,并且是第一次使用Firebase,所以请原谅我可能遇到的任何误解以及我对术语缺乏了解。
我正在尝试检索有关存储在数据库中的用户的数据(电子邮件和用户名)。
代码在数据库中成功找到userID。然后使用userID以导航到包含用户名和电子邮件的目录。它将这些值存储在snapshot
中。
出于某种原因,当打印snapshot
时,它会显示userID,但目录的内容(用户名和密码)显示为<null>
。我确定我尝试访问和检索数据的目录是否存在且不为空(它包含用户名和电子邮件)。我希望snapshot
存储用户名和电子邮件,但打印显示它没有正确执行,我无法弄清楚原因。
这是我的代码块:
func checkIfUserIsLoggedIn() {
if Auth.auth().currentUser?.uid == nil {
perform(#selector(handleLogout), with: nil, afterDelay: 0)
} else {
let uid = Auth.auth().currentUser?.uid;
Database.database().reference().child("Users").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
print(snapshot)
if let dictionary = snapshot.value as?[String:AnyObject] {
self.userLabel.text = dictionary["name"] as? String
}
}, withCancel: nil)
}
}
以下是打印到控制台的内容:
Snap (ywU56lTAUhRpl3csQGI8W8WmQRf1) <null>
以下是我尝试访问并登录snapshot
的数据库条目:
I'm a new Stack Overflow user and don't have enough experience on the site to be allowed to embed images in posts, so this is the external link
感谢阅读,我们非常感谢任何帮助!!
答案 0 :(得分:3)
您在Firebase中的引用是"users"
,但您在代码中使用的是.child("Users")
。确保您的查找与您的节点匹配大小写。我发现最好创建一个对该节点的引用,并将其用于写入和读取。
let usersRef = Database.Database().reference().child("users")
Snap (ywU56lTAUhRpl3csQGI8W8WmQRf1) <null>
括号中的部分指的是您要观察的结束节点。在这种情况下,它指的是uid!
。
答案 1 :(得分:0)
if u want to get username or email then you make first the model class for
Example:-
class User: NSObject {
var name: String?
var email: String?
}
then user firebase methed observeSingleEvent
FIRDatabase.database().reference().child("user").child(uid).observeSingleEvent(of: .value, with: { (snapShot) in
if let dictionary = snapShot.value as? [String: Any]{
// self.navigationItem.title = dictionary["name"] as? String
let user = User()
user.setValuesForKeys(dictionary)
self.setUpNavigationBarWithUser(user: user)
}
})`
答案 2 :(得分:0)
如果没有找到您的询问值,则您询问了错误的目录。检查 firebase db 子名称,它必须与您的代码中的完全相同(“用户”)