gpt4 book ai didi

ios - Firebase 查询观察重新显示数据

转载 作者:行者123 更新时间:2023-11-30 11:53:14 25 4
gpt4 key购买 nike

我有一个 firebase 查询,可以观察来自 posts 子项的数据。

func fetchPosts () {

let query = ref.queryOrdered(byChild: "timestamp").queryLimited(toFirst: 10)

query.observe(.value) { (snapshot) in
for child in snapshot.children.allObjects as! [DataSnapshot] {
if let value = child.value as? NSDictionary {
let post = Post()
let poster = value["poster"] as? String ?? "Name not found"
let post_content = value["post"] as? String ?? "Content not found"
let post_reveals = value["Reveals"] as? String ?? "Reveals not found"
post.post_words = post_content
post.poster = poster
post.Reveals = post_reveals
self.postList.append(post)
DispatchQueue.main.async { self.tableView.reloadData() }
//make this for when child is added but so that it also shows psots already there something like query.observre event type of
}
}

但是,当用户发布某些内容时,它会创建多个包含数据的单元格。例如,如果我发布“你好”,则会出现两张新卡片,上面有“你好”。但是,当我退出 View 并调用获取帖子功能时,它会显示正确的单元格数量。另外,当我从数据库中删除帖子时,它还会添加一个新单元格并创建它的两个副本,直到我重新加载 View ,然后它会显示数据库中的正确数据。

我怀疑这与observe(.value)有关,因为它可能从数据库获取帖子,并且每次数据库更改时都会创建一个新数组。因此,当我添加新帖子时,它会添加一个数组,因为该帖子已添加并且它现在存在于数据库中,并且当我刷新 View 时,它只是直接从数据库收集数据。

此外,有时会显示正确数量的单元格,有时会出现多个随机帖子实例,无论我是否刚刚添加了它们。

如何更改我的查询,以便它最初从数据库加载所有帖子,并且当添加某些帖子时,它只创建一个新单元格而不是两个?

编辑:似乎发生的逻辑是,当函数加载时,它会在调用 fetchPosts() 时获取所有帖子。然后,当向数据库添加某些内容时,它会再次调用 fetchPosts() 并将新数据添加到数组中,同时获取所有旧数据。再次。

最佳答案

使用 Firebase 将快照附加到数组时,我总是做的一件事是首先检查它是否存在。对于你的情况我会添加

    if !self.postList.contains(post) {
self.postList.append...

但是,为了使这项工作正常进行,您必须为我猜测的 Post 类制定一个可等同的协议(protocol),如下所示:

    extension Post: Equatable { }

func ==(lhs: Post, rhs: Post) -> Bool {
return lhs.uid == rhs.uid
}

关于ios - Firebase 查询观察重新显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48124650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com