我有一个UICollectionViewController
,它充当从我的Firebase数据库检索并显示数据的提要。它是窗口的根视图控制器,所以它始终存在。我的问题是,每次出现控制器时,所有来自其观察节点的孩子都会被添加到收集视图中。这最初是好的,但是当我离开控制器并返回时,所有相同的数据都会被追加,从而产生重复。下面是一些伪代码,较火力地堡我互动:Swift Firebase使用.child添加检索重复数据
class ViewController: UIViewController {
var children_query: DatabaseQuery!
override func viewDidLoad() {
super.viewDidLoad()
self.children_query = Database.database().reference().child("children").queryOrdered(byChild: "timestamp").queryStarting(atValue: Date().timeIntervalSince1970)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.observeAddedChildren()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.children_query.removeAllObservers()
}
func observeAddedChildren() {
self.children_query.observe(.childAdded, with: { snapshot in
print(snapshot.value)
})
}
}
在这个伪代码,而不是处理UI,我只需打印snapshot
,但点保持。每次出现控制器时,所有孩子都会打印。我怎样才能检索只有尚未检索的数据?谢谢。
那么我调用'viewWillDisappear'中的'self.children_query.removeAllObservers()',最终我不想在视图不可见时继续观察。但好主意;我可能能够解决这个问题。 –
我明白了。但是,如果你调用'removeAllObservers',然后'观察'当视图再次可见时,你正在观察的事物不知道你已经添加了一些项目到你的收藏视图。因此,无论是(1)从'viewWillAppear'的集合视图中删除所有项目,或者(2)_you_必须跟踪哪些项目已被添加(可能在数组中),并且如果在观察者中再次看到它们,块。 – Matthew
@ArchieGertsman见编辑答案 – Matthew