UITableView reloadData() не работает в swift?

#ios #swift #uitableview #reloaddata

#iOS #swift #uitableview #reloaddata

Вопрос:

У меня есть TableView, который я пытаюсь заполнить из Firebase, но у меня проблема с reloadData(), он не обновляет таблицу.

Это мой код:

  func showAnswers(pos: Int, name: String){
    let n = name
                
    answersReference.observe(DataEventType.value, with: {(snapshot) in
        if(!snapshot.exists()){
            
        }else{
            let answers = snapshot.children
            
            for answer in answers{
                let answersFromDB = AnswerFromDBObject()
                answersFromDB.setQuestion(question: (answer as! DataSnapshot).key)
                
                let ansData = (answer as! DataSnapshot).children
                
                for a in ansData{
                    answersFromDB.setAnswer(answer: (a as! DataSnapshot).key)
                }

                print("firebase answer: (answersFromDB.getAnswer())")

                self.answerFromDBObject  = [answersFromDB]
            }

            print("array count: (self.answerFromDBObject.count)")

            self.userInfoAnwers.text = NSLocalizedString("users_questions", comment: "").replacingOccurrences(of: "(usernamehere)", with: n)
            self.answersTable.reloadData()

        }
    })
}
 

И мои методы делегирования TableView:

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

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "answersCell") as! SeeAnswersCell
    
    let answer = answerFromDBObject[indexPath.row]
    
    cell.question.text = answer.getQuestion()
    cell.answer.text = answer.getAnswer()
    
    return cell
}
 

Это методы печати на консоли:

ответ firebase: красный
ответ firebase: Отлично
ответ firebase:
количество массивов в Лондоне: 3

Комментарии:

1. вы установили источник данных и делегируете? вызывается ли метод делегирования после перезагрузки?

2. Да, я установил их из раскадровки, но методы делегирования вообще не вызываются.

3. Это кажется неправильным, попробуйте переустановить их или сделать это в коде

4. Это тоже не работает.

Ответ №1:

  1. Попробуйте это после финала })

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

Вы делаете это, чтобы иметь возможность перезагрузить его в основном потоке

  1. Проверьте подключенный делегат TableView и источник данных
  2. Если вы используете ячейку Xib, проверьте, зарегистрирована ли она

Комментарии:

1. Комментарий обновлен, проверьте его

2. Все подключено, но не работает.

3. вы сделали это после })??