将子项添加到firebase(iOS) - 插入新子项不会停止

时间:2018-01-23 23:28:48

标签: ios swift firebase firebase-realtime-database

目前,我正在创建一个用户可以创建和加入活动的应用。我正在努力跟踪如何跟踪用户加入的事件。我决定存储一系列的事件键' Firebase中每个用户的(事件ID)。但是,当用户点击“加入事件”按钮时,Firebase会向用户添加数百个新子项(使用相同的事件键)。它看起来像某种无限循环(但我没有使用任何循环)。首先,我从Firebase加载当前事件键数组,然后将新的数据附加到数组中。然后,必须更新eventKeys子项。

@IBAction func joinEventButtonTapped(_ sender: UIButton) {

    guard let uid = user?.uid else {
        return
    }

    let ref = Database.database().reference(withPath: "users").child(uid)

    ref.observe(.value) { (snapshot) in
        self.currentUser = CustomUser(snapshot: snapshot)

        if let currentUserEventKeys = self.currentUser?.eventKeys, let newEventKey = self.currentEvent?.key {
            var eventKeys: [String] = currentUserEventKeys
            eventKeys.append(newEventKey)
            let values = ["eventKeys": eventKeys]
            ref.updateChildValues(values)
        }
    }
}

var currentUser: CustomUser?
var currentEvent: CustomEvent?
let user = Auth.auth().currentUser

我的代码有什么问题?

1 个答案:

答案 0 :(得分:1)

在你调用localhost:8000/api-auth/的地方,这是一个开放的观察,一旦被调用,将永远在数据库中观察该路径,并在更新值时执行其中的代码。当你更新其中的代码(更新值)时,它也会触发ref.observe(一直在寻找值正在更新的开放观察),这意味着它还会触发内部代码,再次更新它,创造无限循环。您需要使用Firebase ref.observe代替