【发布时间】:2018-01-06 05:43:44
【问题描述】:
我有一个 firebase 查询,用于观察来自帖子子项的数据。
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
}
}
但是,当用户发布内容时,它会创建一个包含数据的多个单元格。例如,如果我发布“你好”,就会出现两张新卡片,上面写着你好。但是,当我退出视图并调用 fetch posts 函数时,它会显示正确数量的单元格。此外,当我从数据库中删除帖子时,它还会添加一个新单元格并创建两个副本,直到我重新加载视图,然后它会显示数据库中的正确数据。
我怀疑这与观察(.value)有关,因为它可能会从数据库中获取帖子,并且每次数据库更改时都会创建一个新数组。因此,当我添加一个新帖子时,它会添加一个数组来表示该帖子已添加并且它现在存在于数据库中,当我刷新视图时它只是直接从数据库中收集数据。
此外,有时会显示正确数量的单元格,有时会出现多个随机帖子实例,无论我是否刚刚添加它们。
如何更改我的查询,以便它最初加载数据库中的所有帖子,当添加一些帖子时,它只创建一个新单元格而不是两个?
编辑:似乎发生的逻辑是,当函数加载时,它会在调用 fetchPosts() 时获取所有帖子。然后,当向数据库添加某些内容时,它会再次调用 fetchPosts() 并将新数据添加到数组中,同时获取所有旧数据。再次。
【问题讨论】:
标签: ios arrays swift firebase tableview