Swift Firestore分页正在检索下一批文档,但替换第一批文档



在Swift中,我试图实现分页,我能够检索下一批文档,但是,而是在UITableView的底部加载它们,它取代了第一批。我不确定我做错了什么。非常感谢任何帮助。下面是我的代码:

private var currentKey: String?
func fetchGlimpseData() {
if currentKey == nil {
GLIMPSE_ALL_USERS_DATA.order(by: TIMESTAMP, descending: true).limit(to: 3)
.getDocuments { (snapshot, error) in

guard let last = snapshot?.documents.last else { return }
guard let allObjects = snapshot?.documents else { return }

allObjects.forEach( { document in
self.glimpse.removeAll()
self.glimpse = Glimpse.parseData(snapshot: snapshot)
self.glimpseTableView.reloadData()
})
self.currentKey = last.documentID
}
} else if currentKey != nil {
GLIMPSE_ALL_USERS_DATA.order(by: TIMESTAMP, descending: true).limit(to: 3).getDocuments { (snapshot, error) in

guard let lastDoc = snapshot?.documents.last else { return }

if snapshot?.isEmpty == false {
GLIMPSE_ALL_USERS_DATA.order(by: TIMESTAMP, descending: true).start(afterDocument: lastDoc).getDocuments { ( snapshot, error) in
guard let snap = snapshot?.documents else { return }
snap.forEach( { document in
self.glimpse = Glimpse.parseData(snapshot: snapshot)
})
}
}
self.glimpseTableView.reloadData()
}
}
}

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
let currentOffset = scrollView.contentOffset.y
let maxOffset = scrollView.contentSize.height - scrollView.frame.size.height

if maxOffset - currentOffset <= 40 {
fetchGlimpseData()
}
}

我认为问题来自对self.glimpse.removeAll()的调用:

GLIMPSE_ALL_USERS_DATA.order(by: TIMESTAMP, descending: true).limit(to: 3)
.getDocuments { (snapshot, error) in

guard let last = snapshot?.documents.last else { return }
guard let allObjects = snapshot?.documents else { return }

allObjects.forEach( { document in
self.glimpse.removeAll()
self.glimpse = Glimpse.parseData(snapshot: snapshot)
...

由于您首先从self.glimpse中删除了所有数据,因此在添加新数据后,上一页的数据将被删除。

保留两个页面,不要调用self.glimpse.removeAll()


正如你在评论中指出的那样,你的第二个页面是由else块加载的,所以上面的代码不会导致这个问题。

在else块中,您还可以用这一行中的每个快照替换self.glimpse的现有值:

self.glimpse = Glimpse.parseData(snapshot: snapshot)

因此:无论self.glimpse在该行之前的值是什么,它将在该行运行后消失。

我希望看到一些东西,你添加Glimpse.parseData(snapshot: snapshot)self.glimpse,而不是每次替换它。

相关内容

  • 没有找到相关文章

最新更新