【发布时间】:2017-10-04 01:55:35
【问题描述】:
过去 12 个月以来,我一直在 Android 上使用 Firebase,并取得了成功。我刚刚切换到 Swift,并试图从我创建的同一个 Firebase 数据库中读取数据,并且在过去 12 个月内一直在使用。由于 FB DB 应用了安全性,我做的第一件事就是让 FB 身份验证(来自 Swift)工作。这行得通。现在,我正在尝试让一个简单的 observeSingleEvent 可操作并且正在苦苦挣扎。
Firebase 数据库还是老样子。它有一个脱离根的用户节点。对于初学者,我只想从用户节点读取用户。我知道身份验证有效,因为当我提交电子邮件和密码时,我会收到确认。当电子邮件/密码错误时,我没有得到确认。鉴于这验证了我与数据库的连接,并且作为测试,我在登录验证后立即插入了以下代码。
当我调试它时,它只是从 "self.ref?.child("users").observeSingleEvent..." 跳到下面的括号。即它从不承认有可用的数据,但有可用的数据。
为了避免有人问“你需要什么?”我正在寻找的是为什么我没有收到以下代码的数据结果集的答案,因为 FB DB 中有数据,并且过去 12 个月以来我一直在 Android 上读取/写入该数据。
欢迎任何/所有帮助,因为我在 Swift / FB 4.0 上大吃一惊
@IBAction func signInButtonTapped(_ sender: UIButton) {
// TODO: Do some form validation on the email and password
if let email = emailTextField.text, let pass = passwordTextField.text {
// Check if it's sign in or register
if isSignIn {
// Sign in the user with Firebase
Auth.auth().signIn(withEmail: email, password: pass, completion: { (user, error) in
// Check that user isn't nil
if let u = user {
// User is found, go to home screen
self.ref = Database.database().reference()
self.ref?.child("users").observeSingleEvent(of: .value, with: {( snapshot) in
let value = snapshot.value as? NSDictionary
let username = value?["username"] as? String ?? ""
print ("*** " + username)
})
}
else {
// Error: check error and show message
}
})
}
【问题讨论】:
-
print(username)不执行? -
谢谢 - 它编译没有错误。然后我可以运行它。鉴于我从未收到 print 语句的任何输出,我在“self.ref?”处设置了一个断点...它到达那里并跳到下一个括号。
-
好的,请尝试在
print(username)之后添加print("inside ref"),然后在没有任何断点的情况下运行程序,看看它是否打印 -
好的,因为
observeSingleEvent是一个异步调用,所以它在后台线程上运行,这就是为什么当你在self.ref上设置断点时它会跳到下一个括号,因为它不会阻塞当前的执行线程,并且会在后台线程的某个时间后执行 -
请添加
print("Snapshot : \(snapshot)"),看看你从数据库中得到了什么
标签: swift firebase firebase-realtime-database firebase-authentication