我已经打了好几个小时了,似乎无法找出2件事。
答案 0 :(得分:3)
我的工作时间是多次将项目添加到我的数组中。
您正在侦听value
事件。只要查询数据发生更改,就会触发此事件。每当它触发时,它都包含查询的完整数据。
这意味着如果您从列表中的三个项目开始,您将获得这三个项目:
1
2
3
然后,如果添加第四项,则会获得一个值事件:
1
2
3
4
您会注意到初始集合与添加值后获得的集合之间存在重叠,这就是您看到重复消息的原因。
处理此问题的最简单方法是侦听child_added
事件,而不是值事件。在上面的场景中,您最初会收到三个child_added
个事件:
1
2
3
然后在添加项目时,您只需获得一个child_added
:
4
使用child_added
也可以简化您的代码,因为您不再需要处理该代码:
query.queryLimited(toLast: UInt(count)).observeSingleEvent(of: .childAdded, with: { snapshot in
// instance of ItemForSale, it's added to the array that contains the latest version of the data.
let itemForSaleSingle = ItemForSale(snapshot: snapshot as! FIRDataSnapshot)