Пожарная в TableView [Swift] - PullRequest
       1

Пожарная в TableView [Swift]

0 голосов
/ 25 февраля 2019

Я уже видел: Swift UITableView reloadData в замыкании , но он все еще не работает.Вот почему я создаю новую тему для этого.

Я пытаюсь вставить данные Firestore в пользовательский просмотр таблицы.Но когда я печатаю числа, он возвращает (в консоли):

"MyDogwalk.listTxt"

И данные не отображаются в табличном представлении.

Полагаю, все это актуально.(У меня также есть 2 класса, с init и т. Д.)

class HistoryViewController: UIViewController {

    //Tableview
    @IBOutlet weak var tableView: UITableView!

    let db = Firestore.firestore()

    var list: [listTxt] = []


    override func viewDidLoad()
    {
        super.viewDidLoad()

        list = createArray()

        tableView.delegate = self
        tableView.dataSource = self
    }

    func createArray() -> [listTxt]
    {
        var tempTxt: [listTxt] = []

        //Authentication
        let authentication = Auth.auth().currentUser?.uid

        //Choosing collection
        db.collection("rastad").document(authentication!).collection("promenad").getDocuments()
            { (QuerySnapshot, err) in
                if err != nil
                {
                    print("Error getting documents: \(String(describing: err))");
                }
                else
                {
                    //For-loop
                    for _ in QuerySnapshot!.documents
                    {
                        self.list.removeAll()
                        let document = QuerySnapshot!.documents.first
                        let data = document!.data()
                        data.forEach { (item) in

                            let data1 = data["Dog"] as? String
                            let data2 = data["Person"] as? String
                            let data3 = data["What"] as? String
                            let data4 = data["Date"] as? String
                            let data5 = data["Time"] as? String


                            let txt = listTxt(dog: data1!, person: data2!, action: data3!, time: data4!, date: data5!)
                            print(txt)

                            tempTxt.append(txt)
                        }

                    }
                    self.tableView.reloadData()
                }
        }

        //return tempTxt
        return list
    }
}

extension HistoryViewController: UITableViewDelegate, UITableViewDataSource
{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return list.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let listPath = list[indexPath.row]

        let cell = tableView.dequeueReusableCell(withIdentifier: "ListCell") as! HistoryCell

        cell.setCell(list: listPath)

        return cell
    }


}

И .. Почему за это проголосовали?Я получил ответ, который действительно работал для этого случая, и вопрос достаточно подробный, чтобы люди могли понять, не так ли?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Измените self.tableView.reloadData() на

self.list = tempTxt
DispatchQueue.main.async {
    self.tableView.reloadData()
}

И пропустите возвращаемый массив из этой функции

0 голосов
/ 25 февраля 2019

createArray() метод запускает асинхронный код и заполняет tempTxt.Но вы возвращаете tempTxt до запуска асинхронного кода.Поэтому вместо возврата из метода createArray и установки его значения в self.list просто сделайте это в самом методе:

self.list = tempTxt
self.tableView.reloadData()

Вы перебираете documents, но всегда используете данные documents.first.Попробуйте это:

self.list.removeAll()

for document in QuerySnapshot!.documents {
  let data = document!.data()
  data.forEach { (item) in

  let data1 = data["Dog"] as? String
  let data2 = data["Person"] as? String
  let data3 = data["What"] as? String
  let data4 = data["Date"] as? String
  let data5 = data["Time"] as? String

  self.list.append(listTxt(dog: data1!, person: data2!, action: data3!, time: data4!, date: data5!))
  }
}

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