ios - 计算 Firebase 数据库子级并显示
问题描述
我编写了一个 tableView 来显示我的 Firebase 数据库中的帖子。在我的侧边栏中(在用户访问 tableView 之前),我添加了一个标签,该标签应显示 tableView 中显示的帖子数,以便用户知道里面是否有东西。所以我的问题是:如何跟踪存储在我的主题“优惠”下的孩子的数量并将它们显示在我的 counterLbl 中?
var ref: DatabaseReference!
ref = Database.database().reference()
ref.child("offers").observe(.childAdded, with: { snapshot in
counterLbl.text = ...
}
解决方案
如果您已经在听.childAdded
,您可以保留一个计数器并增加它:
var nodeCount: Int = 0
ref.child("offers").observe(.childAdded, with: { snapshot in
nodeCount = nodeCount + 1
counterLbl.text = String(nodeCount)
}
如果您的用例还可以从数据库中删除节点,您还应该监听.childRemoved
以减少计数器:
ref.child("offers").observe(.childRemoved, with: { snapshot in
nodeCount = nodeCount - 1
counterLbl.text = String(nodeCount)
}
更高级的场景
请注意,此方法要求您下载要计数的所有节点。这在您当前的情况下应该可以正常工作,因为无论如何您都在下载所有优惠。但是当您获得更多数据时,您可能只想读取/显示报价的子集,在这种情况下,上面的代码只会计算该子集中的节点。
如果在这种情况下您仍然想要所有报价的计数,常见的方法是在数据库中保留一个单独的计数器值,您每次添加/删除报价时都会更新该值。有关这方面的更多信息,请参阅:
推荐阅读
- python - CSRF 验证因使用模型而失败
- javascript - get dynamic table value on button click
- java - RecyclerAdapter getItemCount 崩溃
- spring - Rabbit mq message duplication
- angular - 外部货币转换器 api 在角度应用程序中不返回数据
- javascript - 获取多个 contenteditable div 中的最新插入符号位置,并将图像附加到光标最后出现的 div
- mysql - 如何在 CodIgniter 中的查询中选择特定数字作为列值
- c++11 - 运营商不匹配!=
- c# - 使用语句无法识别 VisualStudio
- javascript - 列表排序不适用于在 jQuery 中使用数据表的 ajax