Загрузить данные Firestore в табличное представление Swift 4 - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть вопрос, связанный с загрузкой данных из Firestore в табличное представление. В принципе, я понимаю, как это сделать, но в этом случае я немного путаюсь, если структура Firestore как ниже:

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

fund

Мне удалось загрузить агент из коллекции, которая называется "WJ18kBvDLhVrvml2slXB". Чтобы получить настоящее имя агенси, мне нужно получить данные из коллекции «Агенси», как показано ниже:

enter image description here

ниже приведен код, который я уже сделал:

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()
            }
    }
}

я пытаюсь напечатать:

self.agencyname.append (agencyNew)

но его отображение ничего. поэтому я не могу загрузить название агентства в свою ячейку табличного представления. Кстати извините за мой плохой английский. Заранее спасибо

1 Ответ

0 голосов
/ 30 апреля 2018

Есть несколько вещей, которые я хотел бы сказать:

1. FireStore запросы являются асинхронными, поэтому по завершении выполняется функция обратного вызова. Перезагрузите ваш tableView в обратном вызове, а не в конце цикла, только тогда он загрузит данные правильно.

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

Введите приведенный выше код чуть ниже print("List of the agency: \(self.agencyname.append(agencyNew))") строки.

2. Вы печатаете "self.agencyname.append(agencyNew)", и это, кстати, void, поэтому ничего печатать не будет, поэтому print(\(self.agencyname)).

3. При использовании guard в loop не используйте return, потому что в случае возникновения ошибки он разорвет цикл для следующей итерации. Мы должны использовать continue здесь, чтобы позволить циклу выполнить полностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...