我正在开发一个简单的社交应用程序(使用firebase和jsqmessagesviewcontroller)并尝试制作“新消息”计数器。 firebase中是否有任何内置功能来检测是否添加了新子项?我试图以这样的方式制作:
ref.observe(.childAdded, with: { (snapshot) -> Void in
self.newMsg += 1
})
但是这一行找到了所有消息,而不仅仅是新消息。是否有任何内置功能可以帮助我解决这个问题?提前谢谢。
答案 0 :(得分:0)
没有解决此问题的方法。但我对如何处理这个问题有一些想法。
可能性A:
我建议您在设备上存储可用子项的值。 (您可以使用UserDefaults。)然后,如果您检查新的孩子,您将获得所有孩子的新数量。您只需要在代码中进行此计算:newValueOfChildren - valueOfChildren
。如果结果相同,你知道没有新的孩子。如果结果不相等,那么现在添加了多少新孩子。完成此计算后,您使用valueOfChildren
UserDefaults
覆盖newValueOfChildren
让我们初始化变量:
let valueOfChildren = UserDefaults.standard
var newValueOfChildren: Int!
我们假设您当前有6个孩子存储在Firebase实时数据库中。
//How to set user defaults:
valueOfChildren.setInteger(6, forKey: "valueOfChildren")
现在我加了三个孩子。因此,现在Firebase数据库中存储了9个子项。您计算现有孩子的代码必须如下所示:
var newValueOfChildren: Int!
ref.observe(.value, with: { (snapshot: FIRDataSnapshot!) in
newValueOfChildren = snapshot.childrenCount
}
现在让我们从UserDefaults获取当前的Int并将它们分配给一个新变量(calcValueA
)。之后我们将计算:
//How to get user defaults:
var calcValueA = defaults.integerForKey("valueOfChildren")
print(newValueOfChildren - calcValueA)
print()
语句将返回:
3
将变量命名有点不同可能有用。 : - )
可能性B:
您可以Firebase Cloud Functions
并使用服务器上的更新和与上述方法类似的功能,或者通过在数据库中将计数器值加1来响应新子项。您只需将其存储在数据库中并从设备中读取即可。
查看Firebase团队构建的这些示例: