我正在创建一个 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(...)
如有任何帮助,我们将不胜感激。
最佳答案
Key Value Observing 在 Objective C 中的工作方式是,您正在观察的每个对象的每个观察到的变化都通过相同的 observeValue
函数。完全有可能在从 Storyboard 中加载 tableView 之前调用您的观察函数,这就是您崩溃的原因。
在触摸 tableView 之前,您应该至少检查两件事:
- 是你的tableView的对象参数===(即这是你正在寻找的对象)
- keyPath == 是您想在此对象上观察的 keyPath 吗?
关于ios - TableView 的观察值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47484735/