如何获取 Firestore 文档并在 UITableView 上显示它们

Posted

技术标签:

【中文标题】如何获取 Firestore 文档并在 UITableView 上显示它们【英文标题】:How to get Firestore documents and display them on a UITableView 【发布时间】:2020-04-02 01:59:22 【问题描述】:

Screenshot of Firestore Project 我想为集合中的每个文档显示“first_name”字段(在 UITableView 中。每次运行应用程序时 UITableView 都会显示为空白。

代码:

导入 UIKit 导入 Firebase

类 HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource

@IBOutlet weak var filterButton: UIButton!

@IBOutlet weak var userTableView: UITableView!

var usersArray = [String]()
var db: Firestore!


override func viewDidLoad() 
    super.viewDidLoad()
    userTableView.delegate = self
    userTableView.dataSource = self
    // Do any additional setup after loading the view.
    db = Firestore.firestore()
    loadData()




func loadData() 
    db.collection("users").getDocuments()  (querySnapshot, err) in
        if let err = err 
            print("Error getting documents: \(err)")
         else 
            for document in querySnapshot!.documents 

                self.usersArray.append(document.documentID)
            
        
        print(self.usersArray)

        self.userTableView.reloadData()
    



func numberOfSections(in tableView: UITableView) -> Int 

    return 1


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

    print("Tableview setup \(usersArray.count)")
    return usersArray.count



func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = userTableView.dequeueReusableCell(withIdentifier: "userCell", for: indexPath) as! UserCell
    let user = usersArray[indexPath.row]

    cell.fullNameLabel.text = user
    print("Array is populated \(usersArray)")

    return cell

【问题讨论】:

【参考方案1】:

看起来您没有将单元格注册到 tableView。尝试使用:tableview.register(UserCell,forCellReuseIdentifier:"Your reuseIdentifier string")。尝试将其插入viewDidLoad

【讨论】:

我还可以建议两件事:当print(self.usersArray)`(self.userTableView.reloadData() 之前)或print("Tableview setup \(usersArray.count)") 打印时,它们输出正确的值吗?如果你对两者都说是,那么你的 UITableView 的实现必须被审查。另一个建议是将return cell 替换为return cell!。希望对您有所帮助。 好吧,他们没有打印任何东西,所以这绝对是个问题。关于我可以尝试解决他们没有打印出正确值的问题的任何想法? 哦,好吧,这是朝着好的方向迈出的一步。下一步是追查问题的根源。如果self.usersArray 没有填充数据,请问自己,为什么?看起来document.documentID 是一个假设填充self.usersArray 的字符串。您可以做的是在self.usersArray.append(document.documentID) 之前打印document.documentID 的值,如果打印的是字符串,那就太好了。如果没有,您应该检查您是如何从 Firebase 中提取数据并进行更正的。 我已经成功打印了数据并且它是准确的。唯一的问题是它仍然没有显示在 UITableView 上。 非常感谢您的帮助。

以上是关于如何获取 Firestore 文档并在 UITableView 上显示它们的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftUI 将值数组写入 Firestore

将图像从 Firebase 存储链接到 Firestore 文档并在 React Native 中显示它们

如何在 FireStore 中获取 isAdmin 字段并在 Flutter 中检查它是真还是假

FIRESTORE - 如何在文档中获取集合的值?

Firestore - 如何在将文档添加到集合后获取文档 ID

Firestore / Flutter - 如何获取文档 ID?