2017-08-22 10 views
0

私はログインページの作成と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) 

       } 
     } 
    } 

私が間違っているつもりです:以下は私のビューコントローラのですか?私は、もし私が 'let let'を使って上の変数をアンラッピングしていると思った。私は個別にアンラップしてみましたが、同じエラーが続いています。少し失われた。

+0

どのラインがエラーを表示していますか? – ColGraff

+0

@ColGraffこれは私のFirebaseデータベース参照行です:self.ref.child( "users")。子(userId).setValue(["firstName":firstName]) – sharedev

+0

これはおそらく 'let userId = user!.uid' – ryantxr

答えて

4

何の問題もなく

これは動作するはずですそれは

ref = Database.database().reference()

スウィフトは、あなたがviewDidLoad()の範囲内で宣言している別の変数と同じように扱っているべきであるので、あなたはrefを使用するために行くとき、それはまだ値がありません。

+0

神、それは今とても明らかです。私はあなたにビールを借りています。ありがとうございました! – sharedev

+1

母私はあなたにそれを保持します;-) –

2

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

var ref: DatabaseReference! 

からデータベースの参照を変更し、その後

self.ref = Database.database().reference() 
を行うのviewDidLoad

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

かに行ってくださいあなたは、データベースの参照を初期化されていないため、

このエラーが発生したviewDidLoad()に、あなたは

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

を呼び出す

import UIKit 
 
import Firebase 
 
import FirebaseDatabase 
 

 
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() 
 

 
     self.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) 
 

 
       } 
 
     } 
 
    }

+0

ご回答いただきありがとうございます。私は最初にそれを試みましたが、var:ref DatabaseReferenceを含まなければ、未解決の識別子 'Database'を使用しています! – sharedev

+0

あなたがインポートしなかったためにそれは "FirebaseDatabase" – Siyavash

+0

あなたの助けをありがとう – sharedev

関連する問題