【问题标题】:Adding child to firebase (iOS) - inserting of new child doesn't stop将孩子添加到 Firebase(iOS) - 插入新孩子不会停止
【发布时间】:2018-01-24 08:24:56
【问题描述】:

目前我正在创建一个应用程序,用户可以在其中创建和加入活动。我正在为如何跟踪用户加入的事件而苦苦挣扎。我决定在 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

我的代码有什么问题?

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database


    【解决方案1】:

    在您调用ref.observe 的位置,这是一个开放式观察,一旦调用,将永远观察数据库中的该路径并在更新值时执行其中的代码。当您更新其中的代码(更新一个值)时,这也会触发ref.observe(始终在寻找正在更新的值的开放观察),这意味着它也会触发里面的代码,再次更新它,创建无限循环。您需要改用 Firebases observeSingleEvent

    【讨论】:

      猜你喜欢
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多