swift - Firebase 数据量翻倍

标签 swift database firebase authentication

我遇到的问题如下,当我登录用户并将数据插入数据库时​​,一切正常,但是当我关闭部分并再次启动部分时,数据加倍而没有插入任何内容。这是什么原因呢?

登录方法

@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 会触发,这是预期的行为。它也可能在应用程序运行时定期触发。

因此,您不应依赖于 addStateDidChangeListener 仅在调用 signInWithEmail 时才会触发的逻辑。

关于swift - Firebase 数据量翻倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43546272/

相关文章:

swift - 使用自定义对象映射

php - WordPress如何动态生成页面?

mysql - 是否可以创建一个 hh :mm time column? 的表

database - 多行的Linq查询条件

javascript - 如何获取使用 `push` 添加到 Firebase 的新帖子的 id?

swift - swift 中符合多种协议(protocol)的类型

ios - 使用 @State 变量属性作为绑定(bind)

ios - 等待 addSubview 成功后再添加另一个 Subview

ios - 使用未声明的类型 'FIRMessagingDelegate' 、 'Messaging' 和 'FIRMessagingRemoteMessage' 。

javascript - Angular Firebase 不反射(reflect)全日历 View 上的变化