多次重新加载 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的主要内容,如果未能解决你的问题,请参考以下文章
从 UITableViewController 重新加载 tableView