Load Firestore data to Table view Swift 4

▼魔方 西西 提交于 2020-01-16 13:17:16

问题


I have a question related to load data from Firestore to table view. Basically, i understand how to do it, but in this case, i kind of confuse if the structure of Firestore as below:

"fund" -> "randomId" -> "agensi: id"

i was able to load the agensi from collection which is "WJ18kBvDLhVrvml2slXB". To get the real agensi name i have to get data from collection "Agensi" as image below:

below is the code that what i have already did:

var agencyname: [String] = []

    func getData()  {

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

            if let err = err
            {
                print("Error getting documents: \(err)");
            }
            else
            {
                //  var agencyNumber = 0
                for document in querySnapshot!.documents {
                    let data = document.data()
                    let agency = data["agensi"] as? String ?? ""
                    let agencyId = document.documentID
                    print(agency)
                    print(agencyId)
                    //MARK get name

                    let newdocRef = Firestore.firestore().document("Agensi/\(agency)")

                    newdocRef.getDocument { (docSnapshot, error) in
                        guard let docSnapshot = docSnapshot, docSnapshot.exists else { return }
                        let dataDetails = docSnapshot.data()

                        let agencyNew = dataDetails!["name"] as? String ?? ""

                        self.agencyname.append(agencyNew)
                        print("List of the agency: \(self.agencyname.append(agencyNew))")

                    }

                }
                self.tableView.reloadData()
            }
    }
}

i try to print:

self.agencyname.append(agencyNew)

but its display nothing. so, i cannot load the name of the agency into my table view cell. By the way sorry for my bad english. Thanks in advance


回答1:


There are few things I would like to tell:

1. FireStore queries are asynchronous so there is a callback function when it finishes. Reload your tableView inside the callback instead of end of the loop only then it will load the data properly.

DispatchQueue.main.async {
    self.tableView.reloadData()   
} 

Write above code just below print("List of the agency: \(self.agencyname.append(agencyNew))") line.

2. You're printing "self.agencyname.append(agencyNew)" and it is void by the way so will not print anything so print(\(self.agencyname)) instead.

3. When using a guard in a loop then don't use return because it will break the loop for next iteration if any error occurs. We should use continue here to let the loop execute completely.



来源:https://stackoverflow.com/questions/50094588/load-firestore-data-to-table-view-swift-4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!