观察TableView的值

时间:2017-11-25 10:04:42

标签: ios swift uitableview tableview observers

我正在创建一个tableview,当单元格的数量增加或减少时,它会在高度上动态变化。为了完成这个,我在我的tableview中添加了一个观察者:

tableView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil)

我通过以下方法收到:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    tableView.frame = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.frame.size.width, height: tableView.contentSize.height)
    tableView.reloadData()
}

然而,当我运行这个时,我收到一个错误:

Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeed414ff8)

我确定这些行导致了错误,并且已经尝试调用super.observeValue(...)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

Key Value Observing在Objective C中的工作方式是,您观察到的每个对象的每个观察到的更改都会通过相同的observeValue函数。完全有可能在从故事板加载tableView之前调用您的observe函数,这就是崩溃的原因。

在触摸tableView之前,你应该检查至少2件事:

  1. 是你的tableView的对象参数===(即这是你要找的对象)
  2. 是要在此对象上观察的keyPath的keyPath ==吗?