UITableView.reloadData() 没有刷新 tableView。没有错误信息
Posted
技术标签:
【中文标题】UITableView.reloadData() 没有刷新 tableView。没有错误信息【英文标题】:UITableView.reloadData() is not refreshing tableView. No error message 【发布时间】:2018-07-21 23:40:13 【问题描述】:我已经看过帖子UITableView.reloadData() is not working。我不确定它是否适用于我的情况,但如果我错了,请告诉我。
我的应用有一个 tableView。从主视图控制器中,我打开另一个视图控制器,创建一个新对象,然后将该对象传递回原始视图控制器,在那里它被添加到一个称为计时器的数组中。所有这些工作正常。但是,当我在 didUnwindFromNewTimerVC() 中调用 tableView.reloadData() 以显示计时器数组的更新内容时,没有任何反应。
注意:我已验证计时器数组已使用新对象进行了更新。它的计数增加,我可以访问它的成员。 didUnwindFromNewTimerVC() 中的其他所有内容都正常执行。 tableView 只是没有更新以反映它。
这是我的代码:
import UIKit
class TimerListScreen: UIViewController, UITableViewDelegate, UITableViewDataSource
@IBOutlet weak var tabelView: UITableView!
var timers = [Timer]()
let tableView = UITableView()
override func viewDidLoad()
super.viewDidLoad()
tabelView.delegate = self
tabelView.dataSource = self
let tempTimer = Timer(timerLabel: "temp timer")
timers.append(tempTimer)
@IBAction func didUnwindFromNewTimerVC(_sender:UIStoryboardSegue)
guard let newTimerVC = _sender.source as? newTimerVC elsereturn
newTimerVC.timer.setTimerLabel(timerLabel: newTimerVC.timerLabel.text!)
timers.append(newTimerVC.timer)
tableView.reloadData()
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
if let cell = tabelView.dequeueReusableCell(withIdentifier: "TimerCell", for: indexPath) as? TimerCell
let timer = timers[indexPath.row]
cell.updateUI(Timer: timer)
return cell
else
return UITableViewCell()
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return timers.count
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 78
谢谢
【问题讨论】:
在 viewWillAppear 中试试看?? 我尝试过以防万一,但效果相同。原来的代码块正在执行,但是对tableView没有可见的影响 【参考方案1】:请注意拼写。有两个表格视图实例:出口 tabelView 和一个(无意义的)实例 tableView。
重新加载outlet的数据
tabelView.reloadData()
并删除第二个实例let tableView ...
的声明行。
但我建议将插座重命名为正确拼写的tableView
(您可能需要在 Interface Builder 中重新连接插座)。
并强制解开单元格
let cell = tabelView.dequeueReusableCell(withIdentifier: "TimerCell", for: indexPath) as! TimerCell
并删除if - else
部分。如果一切都在 IB 中正确连接,则代码不得崩溃。
【讨论】:
嗯,那很痛苦。感谢您指出了这一点!我盯着它看了好几个小时也没看到。以上是关于UITableView.reloadData() 没有刷新 tableView。没有错误信息的主要内容,如果未能解决你的问题,请参考以下文章
UITableView, reloadData 重新加载单元格但不调整表格大小
使用UITableView是如何判断reloadData加载数据已经结束
UITableView reloadData 与 performSelectorInBackground