UITableView reloadData() 不能快速工作?
Posted
技术标签:
【中文标题】UITableView reloadData() 不能快速工作?【英文标题】:UITableView reloadData() not working in swift? 【发布时间】:2020-12-18 09:53:11 【问题描述】:我有一个我想从 Firebase 填充的 tableView,但我遇到了 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】:在最后 ) 之后试试这个
DispatchQueue.main.async self.answersTable.reloadData()
您这样做是为了能够在主线程中重新加载它
检查 tableView 委托和数据源已连接
如果您使用的是 Xib 单元,请检查它是否已注册
【讨论】:
评论更新,检查一下 一切都已连接,但无法正常工作。 你是在 ) 之后做的吗??以上是关于UITableView reloadData() 不能快速工作?的主要内容,如果未能解决你的问题,请参考以下文章
UITableView.reloadData() 没有刷新 tableView。没有错误信息
UITableView 的 reloadData() 的替代方案?
UIView 与 UITableview 和 UIImageview,使用 reloadData 访问 UITableview
UITableView 强制 sectionIndex 更新而不调用 reloadData