我正在创建一个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(...)
非常感谢任何帮助。
答案 0 :(得分:2)
Key Value Observing在Objective C中的工作方式是,您观察到的每个对象的每个观察到的更改都会通过相同的observeValue
函数。完全有可能在从故事板加载tableView之前调用您的observe函数,这就是崩溃的原因。
在触摸tableView之前,你应该检查至少2件事: