从Firestore加载大数据到表视图Swift

madhatter989

firestore可以存储大约500多个信息,我想将其显示到表格视图中。基本上,我已经成功显示了单元格中的所有数据,但是问题是,加载所有数据需要1分钟以上的时间。加载数据时,除非所有数据完成加载,否则无法滚动表视图。如何在数据仍加载时启用滚动?如果不可能,如何先加载前20个数据,如果用户位于单元格的末尾,将如何继续加载?这是我尝试从Firestore获取数据的一些代码:

    func getData () {
    db.collection("fund").getDocuments()
        {
            (querySnapshot, err) in

            if let err = err
            {
                print("Error getting documents: \(err)");
            }
            else
            {
                for document in querySnapshot!.documents {
                    let data = document.data()
                    let agencyPath = data["agensi"] as? String ?? ""
                    let title = data["title"] as? String ?? ""
                    let program = data["program"] as? String ?? ""
                    let perniagaan = data["perniagaan"] as? String ?? ""
                    let newMax = data["max"] as? Int
                    let agencyId = document.documentID
                    let query = Firestore.firestore().collection("Agensi")
                    let newQuery = query.whereField("name", isEqualTo: "\(agencyPath)")

                    newQuery.getDocuments()
                        {
                            (querySnapshot, err) in

                            if let err = err {
                                print("Error getting documents: \(err)");
                            } else
                            {
                                for document in querySnapshot!.documents {
                                    let data = document.data()
                                    let logo = data["logo"] as? String ?? ""
                                    //store to Struct
                                    let newModel = DisplayModel(agency: title, agencyId: agencyId, programTag: program, perniagaanTag: perniagaan, max: newMax, agencyPath: agencyPath, logoUrl: logo, agencyTitle: agencyPath)
                                    self.agencyList.append(newModel)
                                }
                                self.tableView.reloadData()
                                self.dismiss(animated: false, completion: nil)
                            }
                    }
                }

            }
    }
}

在单元格上显示数据:

      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cellData: DisplayModel

    if searchController.searchBar.text != "" {
        cellData = filteredData[indexPath.row]

    } else {
        cellData = agencyList[indexPath.row]

    }

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? HomeTableViewCell

    cell?.agencyName.text = cellData.agency
    cell?.agencyImage.sd_setImage(with: URL(string: "\(cellData.logoUrl ?? "")"), placeholderImage: UIImage(named: "no_pic_image"))

    return cell!


}

对单元格的最后一行执行的操作:

    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

    if searchController.searchBar.text != "" {
       let lastElement = filteredData.count - 1
        if indexPath.row == lastElement {
            //getData()
            // handle your logic here to get more items, add it to dataSource and reload tableview
        }
    } else {
        let lastElement = agencyList.count - 1
        if indexPath.row == lastElement {
            //getData()
            // handle your logic here to get more items, add it to dataSource and reload tableview
        }

    } 
}

我真的不知道应该先采用哪种方法来加载20个数据并在单元格行的末尾继续加载,如果没有解决方案,至少我可以在加载会话期间滚动表格视图。谢谢,为您提供的信息,我上个月才学得很快。感谢你们对我的帮助。

安德烈亚斯(Andreas Oetjen)

您应明确采用该UITableViewDataSourcePrefetching协议。

检查一些博客,例如:https : //www.raywenderlich.com/187041/uitableview-infinite-scrolling-tutorial

并按如下所述将其用于分页:https : //firebase.google.com/docs/firestore/query-data/query-cursors

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 swift 中附加数组后如何使表视图从 Firebase Firestore 加载数据

如何使用 swift 从多个本地 JSON 文件加载数据到表视图中的标签

如何使用 swift 从本地 JSON 加载数据到表视图中的标签

Swift:无法使用Firebase将数据同步到表视图

Swift:将数据传递到静态表视图

Swift 5:以闭包形式显示数据到表视图

表视图未加载数据

从 Firebase 获取数据后如何刷新容器视图(重新加载表视图):Swift

Laravel 通过视图传递大数据,加载时间慢

将数据从表视图传递到 Swift 标签栏中的视图控制器

Swift-从Firestore加载后,将数据从Base ViewController传递到两个Container ViewController

IOS 表视图中的数据加载问题

通知表视图以重新加载数据

使用Swift在表视图中重新加载单元格数据

如何在Swift中将数据从一个表视图传递到另一个表视图?

我无法在 swift 3 中将数据从模型类传递到表视图?

JSON 数据到表视图太慢

从Firebase实时读取数据到表视图

从表视图到标签的数组数据

将数据从表视图传递到视图控制器

Winforms异步加载大数据?

Swift-将数据从子视图传递到父视图

尝试从Firestore检索数据到回收站视图

使用 ng-repeat 缓慢加载具有大数据的角度数据表

数据绑定到数据表或网格视图时出错

从Javascript到servlet的大数据

在显示表视图之前分析未加载的数据

选择段时如何从表视图加载所选数据?

如何自动重新加载表视图数据源