Данные запроса в Firestore не отображаются - PullRequest
0 голосов
/ 31 мая 2018

Я пользуюсь swift и firestore, firebase.Я хочу поместить данные в tableView.

Я использую Firestore и Querying, но в табличном представлении данные не отображаются .. Как я могу показать данные в таблице?

import UIKit

    import Firebase

    class JjimVC: UITableViewController {
        var tours:[Tour_] = []

        override func viewDidLoad() {
            super.viewDidLoad()
            let db = Firestore.firestore()
            let uid = Auth.auth().currentUser?.uid as! String

            var ref = db.collection("userTourRelations").whereField("state", isEqualTo: 1).whereField("user", isEqualTo: uid).getDocuments() { (querySnapshot, err) in
                    if let err = err {
                        print("Error getting documents: \(err)")
                    } else {
                        for document in querySnapshot!.documents {
                            let tourRef = db.collection("tours").document(document.data()["tour"] as! String)
                            let tour = Tour_()
                            tourRef.getDocument { (document, error) in
                                if let document = document, document.exists {
                                    tour.id = document.documentID
                                    tour.name = document.data()!["name"] as! String
                                    tour.creator = document.data()!["creator"] as! String
                                    tour.timeLimit = document.data()!["timeLimit"] as! Int
                                    tour.detail = document.data()!["detail"] as! String
                                    tour.createDate = document.data()!["createDate"] as! Date
                                    tour.updateDate = document.data()!["updateDate"] as! Date
                                } else {
                                    print("Document does not exist")
                                }
                            }
                            self.tours.append(tour)
                        }
                    }
            }
            self.tableView.reloadData()
            // Uncomment the following line to preserve selection between presentations
            // self.clearsSelectionOnViewWillAppear = false

            // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
            // self.navigationItem.rightBarButtonItem = self.editButtonItem
        }

1 Ответ

0 голосов
/ 31 мая 2018

у вас есть много асинхронных вызовов, рассмотрите возможность использования DispatchGroup

let dGroup = DispatchGroup()  /// 1

//

var ref = db.collection("userTourRelations").whereField("state", isEqualTo: 1).whereField("user", isEqualTo: uid).getDocuments() { (querySnapshot, err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                for document in querySnapshot!.documents {
                    dGroup.enter()  ///  2
                    let tourRef = db.collection("tours").document(document.data()["tour"] as! String)
                    let tour = Tour_()
                    tourRef.getDocument { (document, error) in
                        if let document = document, document.exists {
                            tour.id = document.documentID
                            tour.name = document.data()!["name"] as! String
                            tour.creator = document.data()!["creator"] as! String
                            tour.timeLimit = document.data()!["timeLimit"] as! Int
                            tour.detail = document.data()!["detail"] as! String
                            tour.createDate = document.data()!["createDate"] as! Date
                            tour.updateDate = document.data()!["updateDate"] as! Date
                            self.tours.append(tour)
                            dGroup.leave()  /// 3
                        } else {
                            print("Document does not exist")
                        }
                    }

                }
            }
    }

dGroup.notify(queue: .main) {   //// 4
    self.tableView.reloadData()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...