一个崩溃-下拉刷新

reason: 'An instance 0x7f86e7a14000 of class TQRAPCompleteTableView was deallocated while key value observers were still registered with it. Current observation info:  (
 Context: 0x0, Property: 0x60800085e090>
 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];

你可能感兴趣的:(一个崩溃-下拉刷新)