多次重新加载 TableView Swift

Posted

技术标签:

【中文标题】多次重新加载 TableView Swift【英文标题】:Reload TableView More Than Once Swift 【发布时间】:2018-08-19 09:53:47 【问题描述】:

我试图不止一次地快速重新加载表格视图。如下代码所示,最初,在 0.5 秒后,tableview “重新加载”,并且从 Firebase 加载 tableview 的所有元素;但是,5.0 秒后,当调用 runTimer() 时,tableview 不会重新加载。本质上,每次在 Firebase 中更新某些内容时,我都试图“重新加载”数据,但似乎没有任何效果。感谢您对解决此问题的任何帮助,因为我已经查看了所有内容并且没有任何运气。

 override func viewDidLoad() 
            super.viewDidLoad()

            checkFireBase()

            tableViewResults.delegate = self
            tableViewResults.dataSource = self

            let nibName = UINib(nibName: "TableViewCell", bundle: nil)
            tableViewResults.register(nibName, forCellReuseIdentifier: "tableCell")

            txtsearchBar.addTarget(self, action: #selector(searchRecords(_ :)), for: .editingChanged)

            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) 

                self.tableViewResults.reloadData()

            

           runTimer()
        

   func runTimer()
        self.timer = Timer(fire: Date(), interval: 5.0, repeats: true, block:  (Timer) in
            self.vehicleArray.removeAll()
            DispatchQueue.main.async 
                self.checkFireBase()

            
        )

        RunLoop.current.add(self.timer!, forMode: .defaultRunLoopMode)
        self.tableViewResults.reloadData()

    

【问题讨论】:

你怎么知道数据没有重新加载。您似乎试图每 5 秒重新加载 t,但如果数据确实如此。或者改变它看起来还是一样的。 @Chris 我可以通过放入 print 语句看到它发生了变化,我看到它正在从 firebase 获取更新的值,但 tableview 没有重新加载并显示正确/更新的信息跨度> 好的,感谢更新 我有一个想法,将 reload tableView 调用放在 checkFirebase() 方法的末尾(或计时器块内)。目前,当runTimer() 被调用时,重载代码会被调用一次,但不会被计时器的代码块调用。 @rengineer 你这里不需要计时器,你应该使用firebase的实时监听器,见下面我的回答 【参考方案1】:

您可以使用 firebase 提供的侦听器,而不是在此处使用计时器,这些侦听器会在 Firebase 实时数据库中的数据更新时自动调用。看这个链接:

https://firebase.google.com/docs/database/ios/lists-of-data

【讨论】:

帮助某人感觉很棒:)【参考方案2】:

您已澄清您的 checkFirebase() 方法正在更新您的数据。然而self.tableViewResults.reloadData() 只被调用一次(当runTimer() 被调用时)并且不会被定时器的代码块调用。

要么将self.tableViewResults.reloadData() 放在你的checkFirebase() 方法中,要么放在计时器的块中。这将在每次触发计时器时重新加载 tableView。

【讨论】:

【参考方案3】:

计时器将执行完成处理程序或完成块中存在的代码。

所以你的表更新调用self.tableViewResults.reloadData() runTimer() 函数中的调用只会在你调用的时候执行 功能。 要更新表格,您需要在以下时间重新加载表格 你更新你的数据源。

试试下面的

func runTimer()
        self.timer = Timer(fire: Date(), interval: 5.0, repeats: true, block:  (Timer) in
            self.vehicleArray.removeAll()
            DispatchQueue.main.async 
                self.checkFireBase()

            
        )

        RunLoop.current.add(self.timer!, forMode: .defaultRunLoopMode)
        self.tableViewResults.reloadData()

    

    func checkFireBase()
        //Fetch the latest data and update the data Source of your Table view
         self.tableViewResults.reloadData()
    

【讨论】:

以上是关于多次重新加载 TableView Swift的主要内容,如果未能解决你的问题,请参考以下文章

每秒重新加载 Tableview 部分会导致闪烁

从 UITableViewController 重新加载 tableView

为啥重新加载 tableView 不能快速工作?

TableView 重新加载不适用于 SwiftUI 中的 UIViewRepresentable

Tableview没有重新加载数据

使用 tableView.reloadData() 重新加载 TableView 的问题