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

iOS UITableView reloadData 刷新结束后执行后续操作

调用 reloadData 时 UITableView 有不需要的动画