2017-04-21 4 views
0

問題は、ユーザにログインしてデータベースにデータを挿入するとすべて正常に動作しますが、セクションを閉じて再びセクションを開始するとデータが何も挿入されずに倍増します。その原因は何ですか?Firebaseがデータを2倍にしています

ログインメト

@IBAction func loginButton(_ sender: Any) { 

    if validar() { 

     try! FIRAuth.auth()!.signOut() 
     FIRAuth.auth()?.signIn(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in 

      if user != nil { 

       self.performSegue(withIdentifier: "loginToPasswordBag", sender: self) 

      } else { 

       self.emailTextField.shake() 
       self.passwordTextField.shake() 
      } 
     }) 

    } 
} 

保存データ方式

@IBAction func addPassword(_ sender: Any) { 

    FIRAuth.auth()?.addStateDidChangeListener({ (auth, user) in 

     if let user = user { 

      var password = [String:String]() 
      password["password"] = self.passwordTextField.text! 
      password["name"] = self.namePasswordTextField.text! 
      password["uid"] = user.uid 
      self.rootRef.child("passwords").childByAutoId().setValue(password) 

     } 
    }) 

} 

私は再び最後に挿入されたオブジェクトは、それが行動そのaddStateDidChangeListener火災時にあなたを期待されている

+0

私は理解できません。しかし、アプリケーションの再起動時に 'addStateDidChangeListener'が起動することが予想されます。また、アプリの実行中に定期的に起動することもあります。ですから、 'addStateDidChangeListener'は' signInWithEmail'を呼び出すときだけ起動するという論理に頼るべきではありません。 –

+0

オハイオ州私はあなたが正しいと思う、私は、ビューが変更された場合、ハンドラはもはや発射されないだろうと思った – luistejadaa

答えて

0

データベースに複製されたログインするとアプリを再起動します。また、アプリの実行中に定期的に起動することもあります。

addStateDidChangeListenerは、signInWithEmailに電話すると起動するという論理に頼るべきではありません。

関連する問題