2017-11-25 161 views
0

我正在創建一個tableview,當單元格數量增加或減少時,它會在高度上動態變化。爲了完成這一點,我添加了一個觀測到我的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

你爲什麼這樣做? tableviews height是屏幕上容器的高度,其contentSize.height是正在滾動的內容的高度。當這兩個值相等時,表格將不會滾動。 – Losiowaty

回答

2

Key Objective Observing在Objective C中的工作方式是,您觀察的每個對象的EVERY觀察到的更改都通過相同的observeValue函數。完全可能的是,在從故事板載入tableView之前,你的觀察函數被調用,這就是爲什麼你會崩潰。

你應該至少檢查2個東西,你觸摸的tableView前:

  1. 是對象參數===您的tableView(即這是你要找的對象)
  2. 是keyPath ==到您想要在此對象上觀察的keyPath?