reason: 'An instance 0x7f86e7a14000 of class TQRAPCompleteTableView was deallocated while key value observers were still registered with it. Current observation info: <NSKeyValueObservationInfo 0x6080008327c0> (
<NSKeyValueObservance 0x60800085bb10: Observer: 0x0, Key path: contentOffset, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x60800085e090>
<NSKeyValueObservance 0x60800085e960: Observer: 0x0, Key path: contentSize, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x60800085e270>
)'
字面理解: 一个叫TQRAPCompleteTableView的类已经被销毁,但是它仍然注册着键值观察者。
我使用的SVPullToRefresh来做页面的下拉刷新。页面顶部有三个导航标签,我是这样实现的: 放一个滑动视图在控制器视图上,滑动视图的contentSize设置为宽度为屏幕宽度的3倍,然后分别自定义3个tableView,然后#import到该控制器中并依次放置在滑动视图content上。
当我进入该控制器,然后做pop操作,导致崩溃,报错见上。
当时对字面上说的键值观察有点摸不到头脑,然后搜了下,基本都是3年前的问答,而且是使用MJRefresh时导致的崩溃。给出的解决方法是:
- ( void )dealloc
{
[header free];
[footer free];
}
而我之前用过MJRefresh实现下拉刷新和上拉加载,并没有遇到过此问题,或许MJRefresh在某个更新解决了此问题,也可能我使用的场景并没有遇到此问题。 我这里使用的SVPullToRefresh,看了下源码也确实是利用了键值观察者来实现。但我并不能使用head free此解决我当前问题。 之前使用SVPullToRefresh也做过类似需求并未遇到此崩溃问题,看了下之前的代码一时也没发现问题所在。
然后打断点调试,最后发现, 3个tableView都需要添加下拉刷新和上拉加载,我以为我都添加了(我以为的以为错了),原来我只给先显示的tableView添加了下拉刷新和上拉加载,而后两个,其实并没有添加,但我却在后面的代码中调用了以下此类代码:
self.completeTableView.showsInfiniteScrolling = YES;
[self.completeTableView.pullToRefreshView stopAnimating];
[self.completeTableView.infiniteScrollingView stopAnimating];