swift - 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
不是每次都替换它。
推荐阅读
- dart - 运行窗口消息“相同的行”
- c# - 如何使用 Xamarin Form 以编程方式在现有网格上添加按钮或标签?
- android - 带有自定义数据源的分页库在房间更新时不更新行
- matlab - 生成具有特定值的随机矩阵
- c - 只为数组的一个元素分配内存
- python - 正则表达式替换预期的字符串或类似字节的对象
- html - 如何通过单击类字体真棒链接来提交带有 JavaScript 的表单?
- mysql - MySQL查询根据财政年度动态获取数据
- c++ - EnableD2DSupport(); 在 MFC Direct2D Wrapper 类中失败
- android - 如何单独设置填充左/右列表视图项