我的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/