【问题标题】:Issue when fetching random documents from Firebase Firestore with Swift on iOS在 iOS 上使用 Swift 从 Firebase Firestore 获取随机文档时出现问题
【发布时间】: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


【解决方案1】:

如果问题是没有获得足够的随机文档,只需再次运行请求并附加结果即可满足相同的条件。 Firestore 的大多数随机解决方案仅针对 1 个随机浮点数,我建议在这种情况下为其他请求添加第二个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    相关资源
    最近更新 更多