Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无法从Firebase读取。返回空_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Swift 无法从Firebase读取。返回空

Swift 无法从Firebase读取。返回空,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我想读取用户的名称,并将其写回Firebase中的另一个子项中。但它返回为空: private var nameFromFirebase: String = "" 我试着这样读: override func viewDidLoad() { super.viewDidLoad() ref = Database.database().reference() //Get userinfo from database let

我想读取用户的名称,并将其写回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!])
            })

        }    
火基结构:

{
  "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)
        }
}

我看到您正在向一个节点/ref/Info/dateandTime/Name写入数据,并且正在从另一个节点/ref/users/uid读取数据-我们还需要查看将数据写入您最初读取的节点的代码。也可以将Firebase结构(作为文本)包括在内。您可能还希望在整个类中始终使用self.ref,看起来您在viewDidLoad中使用了ref,在其他地方使用了self.ref。您可能还想考虑编写UID而不是名称,因为它将是对用户感谢您的答复和提示的一致参考。当我有权访问该项目时,我将发布请求的代码。但是,有一个问题:当我打印
快照时,它会返回用户子级中的所有数据,包括名称。所以它肯定是从Firebase读取的OK,所以我添加了数据写入Firebase的方式,以及乐于帮助的结构:)