我有这种JSON树:
在我的应用程序的主页上,我只想显示组列表和该组中的消息数。
在正常情况下,我获取所有聊天并显示每个群组聊天消息的数量,但是如果有更多的群组,这样做会产生很大的性能影响。
我发现this用于Web API并已过时,但未找到iOS SDK。
那么如何在不检索所有消息的情况下从group1获取消息计数?
最佳答案
如何在每个组下添加一个 noOfMessages
节点,并在每次组消息计数更改时对其进行更新。您将必须进行查询以计算noOfChildren的时间,对吗?但是这种方式并非每次都如此。
对我来说,我刚刚创建了一个 func countNodes()
,每次添加一个孩子时都会被触发,或者您可以在NSTimer中使用timeInterval,正如您所说的,这很昂贵。
但是使用 .childAdded 时,您将仅收到附加的键-值对,而不是整个节点的值,然后您要做的就是用 .childAdded 计数的no更新您的 noOfMessages
节点的值。
至于您的情况,请将您的结构更改为:-
chats :{
group1 : {
...
},
},
noOfMessages :{
group1 : 18,
group2 : 76,
....
}
将观察者添加到每组eventType
.childAdded
中。FIRDatabase.database().reference().child("chats/group1").observeSingleEvent(of: .childAdded, with: {(snap) in
//Run transaction to update your noOfMessage Count
})
要获取noOfMessages计数:
FIRDatabase.database().reference().child("noOfMessages/group1").observeSingleEvent(of: .value, with: {(snap) in
let count = snap.value as! Int
})