[英]Trouble retrieving data from Firebase using .Value/.Child added in swift
我正在开发一个项目,我从firebase(“排队”)中提取数据。 基本上数据是用时间戳保存的,因此当它被调用时,它可以按顺序排序(先进先出)。
我面临的问题是当我在我的应用程序上检索数据时。 根据我的研究,在Stack overflow以及firebase文档中,.Value提供了一个快照,并在添加新数据时继续监听数据。 但是,当添加新数据时,它将获取整个集合的新快照(因此在我的应用程序阵列上“复制数据”)。
为了解决这个问题,我尝试使用.ChildAdded,它可以在将新数据添加到firebase数据库时将新数据添加到我的数组中。 但是它没有添加完整的数据集(数据库中已经存在的数据),这是我需要的,除了添加新数据。
假设firebase节点如下:
App_Queue:
Category1:
Timestamp1:
Uid: User_1_uid
Timestamp2:
Uid: User_2_uid
Swift代码(2.3):
情况1:
self.databaseRef.child("App_Queue/\(Category1)").queryLimitedToLast(15).observeEventType(.Value, withBlock: { (snapshot) in
if let userDict = snapshot.value as? [String:AnyObject]{
for each in userDict{
let timeIdExtract = each.0 as! String
self.timeIdArray.append(timeIdExtract)
print(self.timeIdArray)
}
//this gives me full snapshot of time stamps & a userId
//but if timestamp3 and user_3_uid is added to firebase, the array is appended with a new snapshot thus, duplicating items.
案例2:
self.databaseRef.child("App_Queue/\(Category1)").queryLimitedToLast(15).observeEventType(FIRDataEventType.ChildAdded, withBlock: { (snapshot : FIRDataSnapshot) in
if let userDict = snapshot.value as? [String:AnyObject]{
for each in userDict{
let timeIdExtract = each.0 as! String // Every follwers ID.
self.timeIdArray.append(timeIdExtract)
print(self.timeIdArray)
}
//this gives me only new items added, but not already added.
// if timestamp3 and user_3_uid is added the array is appended with this new item. But timestamp1 & timestamp2 not added
案例3:我尝试了Case1的混合体(而不是使用.observeSingleEventOfType())和Case2,在案例1中的代码之后添加了self.databaseRef.removeAllObservers()
,然后为case2打开.ChildAdded观察者。 它几乎可以工作....通过案例1添加初始快照,然后监听,如果说最近添加了timestamp2,它将在调用Case2时再次追加它,从而复制数组。
所以我的问题是:如何在数据库中获取现有对象并添加新的对象,而不重复数组中的数据?
编辑
我很傻 - 在块之后有一些无关紧要的代码。 DOH! 对于遇到问题的人,首先要检查! 还。与observeEventType配对的.ChildAdded完成了这个技巧。 (获取DB +中已有的所有先前数据,在添加新数据时)。
self.databaseRef.child("App_Queue/\(Category1)").queryLimitedToLast(15).observeEventType(.ChildAdded, withBlock: { (snapshot) in
...
我很傻 - 在块之后有一些无关紧要的代码。 DOH! 对于遇到问题的人,首先要检查! 还。与observeEventType配对的.ChildAdded完成了这个技巧。 (获取DB +中已有的所有先前数据,在添加新数据时)。
self.databaseRef.child("App_Queue/\(Category1)").queryLimitedToLast(15).observeEventType(.ChildAdded, withBlock: { (snapshot) in
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.