快速表视图滚动和后退按钮命中

时间:2011-09-23 11:06:01

标签: iphone uitableview crash scroll back

当我快速滚动我的桌面视图(用一个长而快的手势)所以它会在屏幕上滚动显示我的单元格几秒钟(让我们说3-4秒) - 所以很快我点击了后退按钮回到上一个屏幕:它可以工作......然后滚动就会停止(在屏幕上我再也看不到了 - 所以3-4秒后):应用程序崩溃了!并且每次我做那个“花哨”的碰撞测试。

我使用了自己的表格查看单元格 - 我有点想到从哪里开始喜欢这个bug。我只能认为前一个视图试图“释放”显然不再显示的内容。

你们有没有经历过这个?或者你试过自己的“测试”应用程序,以确保它不会像我一样崩溃?

任何帮助指针当然都非常感激!

由于

干杯, geebee

EDIT1:感谢你的回答 - 我终于看到如果你把我的removeallobjects放在viewwilldisappear而不是viewDidDisappear方法中,就会发生这种情况...现在好了

3 个答案:

答案 0 :(得分:0)

在后退按钮操作中检查此情况。

E.g

-(void)backButtonAction:(id)sender {

//If table is scrolling
 if([mTableView isDecelerating]){
    //Don't push back or condition you want to perform
}

else {
//your condition.
}

}

我们知道tableview是UIScrollview的层次结构,我们可以使用isDecelerating来检查按下按钮时表是否滚动。

答案 1 :(得分:0)

当视图停止时,它会调用其scrollView委托的一些函数,我想这是你的ViewController。

当用户点击回来时,navigationController会释放它显示的ViewController。因此,如果你没有在某处保留它,ViewController将被释放,视图将向不再存在的对象发送消息。

为了看看我是否真的很快,你可以在你的项目中添加NSZombieEnable = YES。之后,您将获得有关崩溃的更准确信息。

我的猜测是你会看到类似:“XXXX消息发送到解除分配的实例[UIViewController XXXX]”

答案 2 :(得分:0)

原因似乎是您的UITableView比其数据源或委托更长寿 - 您确定它没有泄漏吗?

在数据源/委托的dealloc方法中,您应该设置

tableView.delegate = nil;
tableView.dataSource = nil;