在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
,而不是每次替换它。