TableView не перезагружается даже при вызове tableView.reloadData - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть приложение, которое приносит данные из fireStore и отображает данные в tableView. Я проверил это, моя модель данных и моя функция getData работают просто отлично. Мои данные в огненной базе, как это; Изображение моей базы данных пожарного магазина1

Моя модель данных выглядит следующим образом;

import Foundation
import Firebase

struct Exercise {
    var explanation: [String]
    var id: String
    var name: String
    var dictionary: [String: Any] {
      return [
        "explanation": explanation,
        "id": id,
        "name": name,
      ]
    }
}

extension Exercise {

  init?(dictionary: [String : Any]) {
    guard let explanation = dictionary["explanation"] as? [String],
        let id = dictionary["id"] as? String,
        let name = dictionary["name"] as? String
        else { return nil }

    self.init(explanation: explanation, id: id, name: name)
  }
}

Моя функция cellForRowAtIndexPath блокируется следующим образом:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "ExerciseCell", for: indexPath) as! ExerciseCell

    cell.exerciseName.text = exercises[indexPath.row].name

    return cell
}

и, наконец, моя функция getData выглядит следующим образом:

private var exercises: [Exercise] = []
private var documents: [DocumentSnapshot] = []

func getData(exerciseName: String) {
    db.collection(exerciseName).getDocuments() { (snapshot, error) in

        guard let snapshot = snapshot else {
          print("Error fetching snapshot results: \(error!)")
          return
        }

        let models = snapshot.documents.map { (document) -> Exercise in
        if let model = Exercise(dictionary: document.data()) {
            return model
        } else {
            // Don't use fatalError here in a real app.
            fatalError("Unable to initialize type \(Exercise.self) with dictionary \(document.data())")
            }
        }
        self.exercises = models        
        self.documents = snapshot.documents

        print(exercises[0].name) //This works just fine

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