快速刷新TableView一次

时间:2018-08-19 09:53:47

标签: ios swift uitableview firebase timer

我试图不止一次地重新加载tableview。如下代码所示,最初,在0.5秒后,“重新加载”表视图,并且从Firebase加载了该表视图的所有元素。但是,在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()

    }

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

您已阐明您的checkFirebase()方法正在更新数据。但是self.tableViewResults.reloadData()只会被调用一次(调用runTimer()时),计时器的代码块不会调用它。

可以将self.tableViewResults.reloadData()放在您的checkFirebase()方法中,也可以放在计时器的代码块中。每次触发计时器时,都会重新加载tableView。

答案 2 :(得分:0)

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

  

因此您的表更新调用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()
    }