有没有一种方法可以取消带动画效果的UITableView/UIScrollView的setContentOffset:animated:方法?

13

当我的UITableView正在执行动画时被释放,我的应用程序会崩溃。只要动画完成,该应用程序就可以正常运行。下面是点击UIButton后的结果,该按钮调用[tableView setContentOffset:offset animated:YES];并快速点击backBarButtonItem以弹出UITableViewController

#0  0x31ec3ebc in objc_msgSend
#1  0x33690248 in -[UIScrollView(UIScrollViewInternal) _scrollViewAnimationEnded]
#2  0x30defa14 in -[NSObject performSelector:withObject:]
#3  0x33690098 in -[UIAnimator stopAnimation:]
#4  0x3368fb7c in -[UIAnimator(Static) _advance:]
...

我从未见过在_scrollViewAnimationEnded上崩溃,显然Google也没有。 我尝试从UITableViewController- (void)viewWillDisappear:(BOOL)animated 方法中调用[tableView setContentOffset:offset animated:NO];,但这并没有解决问题。

有什么想法可以停止正在进行动画的UITableViewUIScrollView吗?

3个回答

28

看起来这可能是一个委托问题。您是否为表格设置了代理,如果设置了,是否在释放表格时将其dealloc?在释放之前,请尝试将tableView的代理设为nil。

【在动画过程中,tableView被CoreAnimation保留,所以这可能不是问题的原因。】


1
我并没有显式释放表视图 - 问题发生在其控制器从视图中弹出时(如果导航控制器需要,从内存中删除)。不过,我认为你解决了它...自从在视图将要出现/消失时分配和nil'ing表视图的代理以来,我就再也没有能够重现这个崩溃。谢谢! - Metric Scantlings
3
顺便说一下,即使使用ARC,我也看到了这个崩溃。一定要手动将表格代理设为nil! - MikecheckDev

1
我认为你的问题是在释放tableView之前就释放了数据源数组。在dealloc方法中,也要检查一下这个问题。

0
这可能会发生在你将一个刷新控制器作为子视图插入到了表格视图中(我的建议是,永远不要这样做)...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接