swift - 无法从 Firebase 读取。返回空

标签 swift firebase firebase-realtime-database

我想读取用户名,并将其写回 Firebase 中的另一个子级中。但它返回空:

private var nameFromFirebase: String = ""    

我正在尝试像这样阅读:

 override func viewDidLoad() {
        super.viewDidLoad()

        ref = Database.database().reference()

        //Get userinfo from database
        let user = Auth.auth().currentUser!.uid
        ref?.child("users").child(user).observeSingleEvent(of: .value, with: { (snapshot) in

            guard let userDict = snapshot.value as? [String: Any],
                let name = userDict["Name"] as? String {
                    return
            }

            //Declare variables for use
            self. nameFromFirebase = name

        })

    }    

@IBAction func sendInfoButton(_ sender: UIButton) {
      let data = ["Name" : nameFromFirebase] as [String : Any]
                self.ref?.child("Info").child(dateAndTime).updateChildValues(data, withCompletionBlock: { (error, ref) in
                    if error != nil{
                        print(error!)
                        return
                    }

                })    
}    

这只是将“”写入 Firebase。我缺少什么?

编辑*
我正在给 Firebase 写信,如下所示:

@IBAction func registerButton(_ sender: UIButton) {

            Auth.auth().createUser(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: { (User: User?, error: Error!) in
                if error != nil {
                    if let errCode = AuthErrorCode(rawValue: error!._code) {

                        switch errCode {
                        case .invalidEmail:
                            self.errorMsg(title: "Error", message: "E-mail format is wrong")
                        case .emailAlreadyInUse:
                            self.errorMsg(title: "Error", message: "E-mail already in use")
                        case .weakPassword:
                            self.errorMsg(title: "Error", message: "Password must contain at least 6 characters")
                        default:
                            print("Create User Error: \(error!)")
                        }
                    }


                    return
                }
                //Register userinfo in Firebase
                let ref = Database.database().reference()
                let usersRefrence = ref.child("users")
                let uid = User?.uid
                let newUserRefrence = usersRefrence.child(uid!)
                newUserRefrence.setValue(["Name": self.nameTextField.text!, "Address": self.addressTextField.text!, "Phone": self.phoneTextField.text!])
            })

        }    

Firebase 结构:

{
  "Info" : {
    "13-8-2018 at: 7:38:21" : {
      "Name" : ""
    }
  },
  "users" : {
    "6VzpfP9qxBUVSZtdYSbyHe9MfVv2" : {
      "Address" : "Janes street 2",
      "Name" : "Jane Doe",
      "Phone" : "87654321"
    },
    "SWhJ5CiJsKfvPOoG5MMSiLZlMC82" : {
      "Address" : "Johns street 1",
      "Name" : "John Doe",
      "Phone" : "12345678"
    }
  }
}    

我还想在 Firebase 的信息节点中实现地址和电话,但首先我需要让它发挥作用。

最佳答案

试试这个,从 firebase 读取时它对我来说效果很好:

  let user = Auth.auth().currentUser!.uid

ref?.child("users").child(user).observeSingleEvent(of: .value, with: { (snapshot) in

            // Get user info
            let value = snapshot.value as? NSDictionary
            let name = value?["Name"] as? String ?? ""

            self.nameFromFirebase = name
            // ...
        }) { (error) in
            print(error.localizedDescription)
        }
}

关于swift - 无法从 Firebase 读取。返回空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51806483/

相关文章:

angular - 如何在 FireBase 中更改数据后更新/绑定(bind) View ?

AngularJS在连接或断开连接到firebase时更新服务值

ios - 如何从 UIActivityViewController 中排除 Action 事件?

python - 如何将 Firebase 与基于 Linux 的客户端应用程序一起使用,以便与服务器进行双向消息通信

ios - 在具有 public init 的类中在 swift 4 中创建单例

swift - 如何向 Swift 项目添加额外的 firebase 模块?

database - Firebase中用户的数据结构

控制台中的 Firebase 实时数据库无法正常工作?

ios - 在企业发行后,运行MDX工具包包装的Swift 4.2 iOS应用程序的问题。异常类型:EXC_BREAKPOINT(SIGTRAP)iOS 12.4

swift - 显示来自 Firebase 的用户信息