Помещение данных Firebase в массив для помещения в текстовое представление (Swift) - PullRequest
0 голосов
/ 03 мая 2020

Итак, я пытался поместить некоторые данные Firebase в массив в Swift, чтобы затем я мог поместить их в текстовое поле. Все работает, однако мое текстовое представление пусто и не содержит строк и данных. Кто-нибудь знает, почему это происходит? Мой код ниже (я импортировал Firebase и UIKit вверху, не знаю, почему Stack Overflow не позволяет мне выразить это ... извините):

class SummaryEmployeesFeelingViewController: UIViewController, UITableViewDataSource{

    struct Feedback {
        let id: Int
        let feeling: String
        let date: Timestamp
    }


    var feedbackarray = [Feedback]()

    @IBOutlet weak var tableView: UITableView!

    let summarydb = Firestore.firestore()

    override func viewDidLoad() {
        super.viewDidLoad()
        addDatatoArray()
        tableView.dataSource = self
        tableView.tableFooterView = UIView()

    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return feedbackarray.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let feedbackcell = tableView.dequeueReusableCell(withIdentifier: "CellReuseIdentifier")!

        let text = feedbackarray[indexPath.row] as? String

        feedbackcell.textLabel?.text = text

        return feedbackcell
    }

    func addDatatoArray(){
        summarydb.collection("employeefeedback").getDocuments { (snapshot, error) in
            if error == nil && snapshot != nil{
                for document in snapshot!.documents{
                    var idValue = document.get("id")
                    var feelingValue = document.get("feeling")
                    var dateValue = document.get("date")
                    let newEntry = Feedback(id: idValue as! Int, feeling: feelingValue as! String, date: dateValue as! Timestamp)
                    self.feedbackarray.append(newEntry)

                }
        }
    }


}


}

Спасибо!

1 Ответ

1 голос
/ 03 мая 2020

Вам нужно перезагрузить tableView после получения данных

 func addDatatoArray(){
    summarydb.collection("employeefeedback").getDocuments { (snapshot, error) in
        if error == nil && snapshot != nil{
            for document in snapshot!.documents{
                var idValue = document.get("id")
                var feelingValue = document.get("feeling")
                var dateValue = document.get("date")
                let newEntry = Feedback(id: idValue as! Int, feeling: feelingValue as! String, date: dateValue as! Timestamp)
                self.feedbackarray.append(newEntry)

            }
          print("count:\(self.feedbackarray.count)")
          DispatchQueue.main.async {
            tableView.reloadData()
          }
      }
    }
}

Также установить делегат tableView

override func viewDidLoad() {
        super.viewDidLoad()
        addDatatoArray()
        tableView.dataSource = self
        tableView.delegate = self
        tableView.tableFooterView = UIView()

    }

Также обновите этот метод

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let feedbackcell = tableView.dequeueReusableCell(withIdentifier: "CellReuseIdentifier")!

        let feedBack = feedbackarray[indexPath.row] as? Feedback

        feedbackcell.textLabel?.text = feedBack.feeling

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