如何知道数据集何时加载?
我已经使用Firebase超过五年了,我很喜欢它。但是,我有一个问题,我希望你能帮助我,但多年来一直让我发疯。
我有很多数据集存储在Firebase上。我需要的是一种知道数据集何时加载的方法。因此,如果在node /Main/PNG/flight/airstrip处有1000条记录,我想知道我何时收到了所有的leaf。
我已经尝试使用**.value**,并使用
Database.database().reference(withPath: key).observe(.value) { [weak self, key] snapshot ...}
然后,我将知道数据集何时到来,因为我将只获得一个快照,其中包含所有树叶的字典,但我不会获得增量(更改和添加)。
我已经订阅了所有的叶子,使用
[.childChanged, .childRemoved, .childAdded].forEach { eventType in
Database.database().reference(withPath: key).observe(eventType) { [weak self, storeEventType] snapshot in ...}
但是,我不知道什么时候我已经收到了所有的数据集。
我的数据模型基于一个初始快照,然后监听叶子的任何变化。
Database.database().reference(withPath: key).observe(.value) { [weak self, key] snapshot ...}
但当我用
[.childChanged, .childRemoved, .childAdded].forEach { eventType in
Database.database().reference(withPath: key).observe(eventType) { [weak self, storeEventType] snapshot in ...}
我再次获得完整的数据集。
我想要的是:
1.以**.observe(.childAdded)并以某种方式知道所有叶何时完成,至少对于该数据集是这样,
1.或者使用.observe(.childAdded),而不接收所有叶子的初始数据集,但是我需要计算出在.observe(.value)和.observe(.childAdded)调用之间是否遗漏了任何内容。
我知道我可以将数据集视为无数的增量和更改,因此不会出现END OF SET**,但是如果我知道有很多记录在排队,在Swift中更新UITableView会更容易,在这种情况下,我可以在UITableView上调用reloadData()。但是,如果只有几条记录在排队,我更喜欢让tableView漂亮地动画化,一次一行。
1条答案
按热度按时间tf7tbtn21#
当加载整个快照时,Firebase SDK会触发
value
事件。因此,即使您使用child*
事件来实际处理数据,您也可以实现value
侦听器来检测加载何时完成。同时实现
child*
和value
事件监听器不会使加载的数据量加倍。Firebase SDK在后台对监听器进行重复数据删除。