【发布时间】:2021-07-22 23:17:37
【问题描述】:
我想在每次用户打开我的应用程序时从 Firestore 中获取随机文档。
我正确实现了功能,它会根据需要随机获取文档。
我的问题是,例如,当随机文档是我的 Firestore 数据库中的最后一个文档时。它将停止加载新文档,因为之后没有更多文档。因为我还实现了当用户到达页面底部时加载下一个文档。
我该如何解决这个问题?
请帮助解决这个问题?我想加载随机文档,而不是在它到达最终文档之前停止加载文档。
这是我的代码:
func loadData(){
let randomShops = db.collection("Shops");
key = randomShops.document().documentID
db.collection("Shops").whereField("__name__", isGreaterThanOrEqualTo: self.key!).order(by: "__name__", descending: true).limit(to: 8).getDocuments(){
querySnapshot, error in
if let error = error {
print(error.localizedDescription)
}else {
self.lastDoc = querySnapshot?.documents[(querySnapshot?.documents.endIndex)! - 1]
self.shops = querySnapshot!.documents.compactMap({addShop(dictionary: $0.data())})
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}
}
然后我会在用户向下滚动时获取新文档。但如果出现的文档是我的 Firestore 数据库中的最后一个文档,即使不是所有文档都已加载,它也不会加载更多文档。
func getNextShops() {
db.collection("Shops").order(by: "__name__").start(afterDocument: lastDoc!).limit(to: 8).getDocuments(){ docs, err in
self.docsCount = docs?.count
if self.docsCount == 0{
self.tableView.stopLoading()
return
}else{
if let err = err {
print(err.localizedDescription)
}else{
docs?.documents.forEach{ data in
self.shops.append(addShop(dictionary: data.data())!)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
self.lastDoc = docs?.documents[(docs?.documents.endIndex)! - 1]
self.lastDocID = self.lastDoc?.documentID
}
}
}
}
【问题讨论】:
-
问题是 我想获取随机文档...每次用户打开我的应用程序时 - 但我在您的代码中没有看到任何生成随机数或documentId,需要知道要获取哪个或哪些随机文档。在问题文本中,它说用户向下滚动时的新文档,但这与打开应用程序时获取随机文档无关。你能澄清这个问题吗?这个
key = randomShops.document().documentID还会生成一个按字典顺序排列的密钥,因此它不是随机的。
标签: ios swift firebase uitableview firebase-realtime-database