代码之家  ›  专栏  ›  技术社区  ›  PerNil

无法从Firebase读取。返回空

  •  0
  • PerNil  · 技术社区  · 6 年前

    我想读取用户的名称,并将其写回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是这样的:

    @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的Info节点中实现地址和电话,但首先我需要让它工作。。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Anvil    6 年前

    试试这个,当我在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)
            }
    }