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个数据并在单元格行的末尾继续加载,如果没有解决方案,至少我可以在加载会话期间滚动表格视图。谢谢,为您提供的信息,我上个月才学得很快。感谢你们对我的帮助。
您应明确采用该UITableViewDataSourcePrefetching
协议。
检查一些博客,例如:https : //www.raywenderlich.com/187041/uitableview-infinite-scrolling-tutorial
并按如下所述将其用于分页:https : //firebase.google.com/docs/firestore/query-data/query-cursors
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句