gpt4 book ai didi

Swift Firebase 4.0 - observeSingleEvent 不返回数据集(但身份验证有效)

转载 作者:行者123 更新时间:2023-11-28 06:11:10 25 4
gpt4 key购买 nike

在过去 12 个月多的时间里,我一直在 Android 上使用 Firebase,并取得了成功。我刚刚切换到 Swift 并试图从我创建的同一个 Firebase 数据库中读取数据,并且在过去 12 个月以上一直在使用它。由于 FB DB 应用了安全性,我做的第一件事就是让 FB 身份验证(来自 Swift)正常工作。这行得通。现在,我正在尝试让一个简单的 observeSingleEvent 可操作并且正在努力。

Firebase DB 还是老样子。它在根之外有一个用户节点。对于初学者,我只想从用户节点读入用户。我知道身份验证有效,因为当我提交我的电子邮件和密码时,我会收到确认信息。当电子邮件/密码错误时,我不会得到确认。鉴于这验证了我与数据库的连接,并且作为测试,我在登录验证后立即插入了以下代码。

当我调试它时,它只是从“self.ref?.child("users").observeSingleEvent...”跳到下面的括号。即它从不承认有可用数据,但确实有可用数据。

避免有人问“你需要什么?”我正在寻找的是一个答案,为什么我没有收到带有以下代码的数据结果集,因为 FB 数据库中有数据,并且我在过去 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
}

})

}

最佳答案

因为 observeSingleEvent 是一个异步调用,所以它在后台线程上运行,这就是为什么当你在 self.ref 上放置一个断点时它会跳到下一个括号,因为它不会阻塞当前执行线程并且一段时间后在后台线程上执行

一种方法是这样的:

@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.fetchUserName { fetchedUserName in
print(fetchedUserName)

}
}
else {
// Error: check error and show message
}

})

}

func fetchUserName(completionHandler: @escaping (String) -> Void) {


self.ref = Database.database().reference()
self.ref?.child("users").observeSingleEvent(of: .value, with: {( snapshot) in
//let value = snapshot.value as? NSDictionary
if let value = snapshot.value as? [String: Any] {
print(value)
let username = value["username"] as? String ?? ""

print (username)
completionHandler(username)

}

})


}

关于Swift Firebase 4.0 - observeSingleEvent 不返回数据集(但身份验证有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46555881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com