Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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创建不带childByAutoId的子项_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

swift firebase创建不带childByAutoId的子项

swift firebase创建不带childByAutoId的子项,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我有一个在线iOS应用程序,我需要知道用户的姓名和号码以及在线用户的姓名和号码,因此我让用户结构有一个childByAutoID,以便在创建时添加子姓名和号码。但问题是,我试图统计在线用户并将其显示在我的ViewController上,因此我的想法是在登录时添加在线用户json结构,在注销时删除,因此我将name+phone作为在线用户结构中的姓名和号码的父级,但我每次尝试从注销Viewcontroller访问它时,var name+number返回为空,因此如果没有子ID,我无法将其从fire

我有一个在线iOS应用程序,我需要知道用户的姓名和号码以及在线用户的姓名和号码,因此我让用户结构有一个childByAutoID,以便在创建时添加子姓名和号码。但问题是,我试图统计在线用户并将其显示在我的ViewController上,因此我的想法是在登录时添加在线用户json结构,在注销时删除,因此我将name+phone作为在线用户结构中的姓名和号码的父级,但我每次尝试从注销Viewcontroller访问它时,var name+number返回为空,因此如果没有子ID,我无法将其从firebase数据库中删除

我不想对在线用户使用childByAutoId,因为我不知道如何存储密钥,因为我使用的是异步函数,这使得如何检索密钥变得太复杂

//1st view controller
func getID() -> String {
    return String(nameField.text! + numberField.text!)
}

@IBAction func linkTapped(_ sender: Any) {
    if (nameField.text != nil && numberField.text != nil) {
        let alert = UIAlertController(title: "Phone Number", message: "Is this your phone number? \n \(numberField.text!)", preferredStyle: .alert)
        let action = UIAlertAction(title: "Yes", style: .default) { (UIAlertAction) in
            PhoneAuthProvider.provider().verifyPhoneNumber("+1 " + self.numberField.text!, uiDelegate: nil) {
                (verificationID, error) in
                if error != nil {
                    print("error: \(String(describing: error?.localizedDescription))")
                    print(self.numberField.text ?? "no number entered")
                } else {
                    getID()
                    let defaults = UserDefaults.standard
                    defaults.set(verificationID, forKey: "authVID")
                    defaults.synchronize()
                    self.performSegue(withIdentifier: "code", sender: Any?.self)

                    let ref = Database.database().reference().child("Users").childByAutoId()
                    let values = ["Name": self.nameField.text, "Phone": self.numberField.text]
                    ref.updateChildValues(values as [AnyHashable : Any], withCompletionBlock: { (err, ref) in

                        if err != nil {
                            print(err as Any)
                            return
                        }
                        print("user saved into firebase db")
                    })

                    let ref2 = Database.database().reference().child("Online Users")
                    let onlineRef = ref2.child(self.getID())
                    onlineRef.updateChildValues(values as [AnyHashable : Any])
                }
            }
        }
        let cancel = UIAlertAction(title: "No", style: .cancel, handler: nil)
        alert.addAction(action)
        alert.addAction(cancel)
        self.present(alert, animated: true, completion: nil)
    } else {
        let alert = UIAlertController(title: "You left me empty", message: "please fill your name and number", preferredStyle: .alert)
        self.present(alert, animated: true, completion: nil)
    }
}
//第二视图控制器

@IBAction func signOutFunction(_ sender: Any) {
    do {
        try Auth.auth().signOut()
        let newVar = ViewController()
        let ref = Database.database().reference().child("Online Users")

        ref.child(newVar.getID()).removeValue()

        self.view.window!.rootViewController?.dismiss(animated: true, completion: nil)
    } catch let error {
        print("not signed in...", error)
    }
}