TableView 的观察值

Observing Value for 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(...)

如有任何帮助,我们将不胜感激。

键值观察在 Objective C 中的工作方式是,您正在观察的每个对象的每个观察到的变化都通过相同的 observeValue 函数。完全有可能在从情节提要中加载 tableView 之前调用您的观察函数,这就是您崩溃的原因。

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

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