我的firebase数据库结构如下:

events
  autoid
    event name: ""
    event date: ""
  autoid
    event name: ""
    event date: ""

我现在有一个函数,它从events节点返回所有的autoid,然后将它们写入一个数组,这样我就可以在另一个快照中使用它们。
函数第一次运行时,它按预期工作。但如果我离开视野回来,它就会崩溃。我认为这是因为它试图再次追加数组,复制值。
这是我的功能
func getEvents() {

        self.dispatchGroup.enter()
      Database.database().reference().child("Events").observe(DataEventType.value, with: { (snapshot) in
            if let dictionary = snapshot.children.allObjects as? [DataSnapshot] {
              //  self.dispatchGroup.enter()
                for child in dictionary {
                    let eventid = child.key
                    self.eventsArray.append(eventid)
                   // print(eventid)
                    //                    print(self.eventsArray)


                }
                self.dispatchGroup.leave()
                print(self.eventsArray)

            }

        })
    }

想知道我如何检索现有的AutoID和在返回到视图时添加的任何新的AutoID和任何新的AutoID。我试过了。childadded,但它返回事件名称、事件日期等,我需要autoid。
我是新来的firebase和swift,所以欢迎任何提示或建议!

最佳答案

如果您想先处理初始数据,然后只得到新数据的通知,那么通常会查找.childAdded事件。

Database.database().reference().child("Events").observe(DataEventType.childAdded, with: { (snapshot) in
    let eventid = snapshot.key
    print(eventid)
    self.eventsArray.append(eventid)
    self.dispatchGroup.leave()
    print(self.eventsArray)
}

当您首次运行此代码时,.childAdded事件将对每个现有的子节点触发。之后,每当添加一个新的子对象时,它就会触发。类似地,您可以监听.childChanged.childRemoved事件来处理这些事件。

关于swift - 自从我上次使用swift从firebase调用函数以来,如何仅检索autoid。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48837716/

10-12 01:51