尽管有多次展开尝试,致命错误:在展开Optional值时意外地发现nil

时间:2017-08-22 00:02:15

标签: swift firebase

我一直在练习登录页面并使用Firebase创建帐户。我成功注册了一个用户并将用户保存在firebase中。现在,我正在尝试在创建帐户时将名字和姓氏保存到用户ID。我已经尝试过查看其他SO的答案,但似乎仍然无法让它发挥作用。

我一直在阅读多个教程,并尝试了多次展开尝试,但仍然遇到此错误。下面是我的视图控制器:

查看控制器

import UIKit
import Firebase

class ViewController: UIViewController {
    var ref: DatabaseReference!

    @IBOutlet weak var emailTextField: UITextField!
    @IBOutlet weak var passwordTextField: UITextField!
    @IBOutlet weak var firstNameField: UITextField!
    @IBOutlet weak var lastNameField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        var ref = Database.database().reference()
    }

    @IBAction func createAccountTapped(_ sender: Any) {
        if let email = emailTextField.text, let password = passwordTextField.text, let firstName = firstNameField.text, let lastName = lastNameField.text {
            Auth.auth().createUser(withEmail: email, password: password ) { (user, error) in
                // ...

                if let firebaseError = error {
                    print(firebaseError.localizedDescription)
                    return
                //add popup later
                }


                let userId = user!.uid
                self.ref.child("users").child(userId).setValue(["firstName": firstName])
                print("User registered in Firebase with a userId of " + user!.uid)

                }
        }
    }

我哪里错了?我以为我在顶部打开变量,用'if let'。我试着单独展开它们,但是仍然有同样的错误。有点失落。

2 个答案:

答案 0 :(得分:4)

viewDidLoad()中,您可以致电

var ref = Database.database().reference()

但它应该是

ref = Database.database().reference()

Swift将其视为您在viewDidLoad()范围内声明的另一个变量,因此当您使用ref时,它仍然没有任何价值。

答案 1 :(得分:2)

请从

更改数据库参考
.fixed-progress{
  width: 100% !important;
}
.fixed{
  position: absolute;
  z-index: 999999999999;
  left: 0px;
  line-height: 1px !important;
}
.fixed-controls{
  max-width: 100%;
}
.video-js{
  position: absolute;
}
.wrapper-video{
  position: relative;
}

 var ref: DatabaseReference!

然后再做

 var databaseRef = Database.database().reference()

或在viewDidLoad中执行

 self.child("users").child(userId).setValue(["firstName": firstName])

发生此错误是因为您没有初始化数据库参考

这应该没有任何问题



self.ref = Database.database().reference()