UITableView.reloadData()不刷新tableView。没有错误讯息

时间:2018-07-21 23:40:14

标签: ios iphone uitableview swift4

我已经看过帖子UITableView.reloadData() is not working。我不确定这是否适用于我的情况,但是如果我错了,请告诉我。

我的应用程序具有tableView。从主viewController中,我打开另一个viewController,创建一个新对象,然后将该对象传递回原始viewController,在此将其添加到名为timers的数组中。所有这些都很好。但是,当我在didUnwindFromNewTimerVC()中调用tableView.reloadData()以显示timers数组的更新内容时,没有任何反应。

注意:我已经验证了timers数组已使用新对象进行了更新。它的计数增加,我可以访问它的成员。 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 else{return}
      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
      }
    }

谢谢

1 个答案:

答案 0 :(得分:0)

请注意拼写。有两个表视图实例:插座 tab el View 和一个(无意义的)实例 tab le View

重新加载插座的数据

tabelView.reloadData()

并删除第二个实例let tableView ...的声明行。

但是,我建议将插座重命名为拼写正确的tableView(您可能需要在Interface Builder中重新连接插座)。


强行拆开电池

let cell = tabelView.dequeueReusableCell(withIdentifier: "TimerCell", for: indexPath) as! TimerCell

并删除if - else部分。如果一切都正确连接到IB中,则代码不得崩溃。