swift Firebase实时数据库,如何知道数据集何时完成加载

yyyllmsg  于 2022-12-10  发布在  Swift
关注(0)|答案(1)|浏览(108)

如何知道数据集何时加载?

我已经使用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漂亮地动画化,一次一行。

tf7tbtn2

tf7tbtn21#

当加载整个快照时,Firebase SDK会触发value事件。因此,即使您使用child*事件来实际处理数据,您也可以实现value侦听器来检测加载何时完成。
同时实现child*value事件监听器不会使加载的数据量加倍。Firebase SDK在后台对监听器进行重复数据删除。

相关问题