当前位置: 首页 > 知识库问答 >
问题:

使用。ChildAdded检索重复数据的Swift Firebase观察

太叔志文
2023-03-14

我有一个UicollectionViewController,它充当提要,从我的Firebase数据库中检索和显示数据。它是窗口的根视图控制器,所以它总是存在的。我的问题是,每当控制器出现时,其观察节点的所有子节点都会被添加到collection视图中。这在最初是很好的,但是当我离开控制器并返回时,所有相同的数据都会被追加,从而创建重复数据。下面是一些伪代码,代表我与Firebase的交互:

class ViewController: UIViewController {

    var children_query: DatabaseQuery!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.children_query = Database.database().reference().child("children").queryOrdered(byChild: "timestamp").queryStarting(atValue: Date().timeIntervalSince1970)
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.observeAddedChildren()
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        self.children_query.removeAllObservers()
    }

    func observeAddedChildren() {
        self.children_query.observe(.childAdded, with: { snapshot in
            print(snapshot.value)
        })
    }

}

在这个伪代码中,我只打印snapshot,而不是处理UI,但问题仍然存在。每次控制器出现时,所有的子项都会被打印出来。如何只检索尚未检索的数据?谢了。

共有1个答案

冉丰茂
2023-03-14

我没有使用过Firebase,但是当您将一个块传递给Observe函数时,没有任何迹象表明视图消失时观察会停止。

所以我想知道是否多次调用Observe是问题所在。您是否尝试在ViewDidLoad中调用Observe一次?

或者,拥有一个属性来记录观察是否已经开始:

var observing: Bool = false

func observeAddedChildren() {
    if observing {
        return false
    }

    self.children_query.observe(.childAdded, with: { snapshot in
        print(snapshot.value)
    })
    observing = true
}
    null
var snapshotIDs : [String] = Array<String>()

func observeAddedChildren() {
    self.children_query.observe(.childAdded, with: { snapshot in
        if !snapshotIDs.contains(snapshot.uniqueID) {
            print(snapshot.value)
            snapshotIDs.append(snapshot.uniqueID)
        }
    })
}
 类似资料:
  • 我在PHP(PDO)中遇到了这种情况; 我正在实现一个从MySql中检索数据的方法,并且做得很好,但问题是重复的数据恢复为关键骨,没有任何值,但其他数据附加更多,留下脚本和图像以了解更多细节; data.php 可变检验 json重复 预期结果

  • 我一直试图访问数据在iFrame使用硒和没有任何成功。 你有什么建议吗?

  • 你好,我想知道以下问题的答案, mysql表中文本数据类型可以拥有的最大数据大小是多少 案例1:从特定字段“消息”中检索数据 案例2:从表中检索所有“消息”数据。

  • 我试图使用庞大的Node.js包将文件从Docx转换为HTML。庞大的自述文件建议使用以下格式转换文件: 在函数中的任何位置放置语句将不允许我使用存储的html,但是我可以将正确的html内容输出到控制台。我需要关于如何返回/使用promise之外的html变量的建议,谢谢。

  • 问题内容: 根据Firebase文档: 为每个现有子项触发一次ChildAdded,然后每次将新子项添加到指定路径时再次触发 因此,我有一个应用程序,该应用程序的顶部带有一个小横幅,每次用户收到新消息时都会弹出。如您所料,这些消息存储在Firebase用户对象的子级中。因此,这就是问题所在,当我加载该应用程序时,它会弹出以显示用户收到的每条消息。是否可以仅在添加新孩子时才调用此观察事件?我不希望仅

  • 我正在使用使用Tweepy库的Python代码来检索特定主题标签的Twitter数据,但问题是我需要检索特定时期,例如,从2013年6月30日到2013年12月30日。我该怎么做?