ios - TableView 的观察值

标签 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(...)

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

最佳答案

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

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

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

关于ios - TableView 的观察值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47484735/

相关文章:

swift - 在 viewDidAppear 中快速淡入数据

ios - 有没有办法知道何时从 UITableView 中删除 UITableViewCell?

ios - UITableView 单元格连接到不同的 Controller

ios - 继承初始化类中的Swift错误

ios - 如何使可重用 View 接受泛型类型

ios - 带有 Parse 对象的 UITableView

ios - SpriteKit 中的更新功能与 iPhone X 不同

ios - 在 iOS 中不使用 @property 可以创建类本地引用吗?

ios - "Convenience initializer missing a ' self ' call to another initializer"

jquery - Mobile WebKit按钮点击伪类