当我快速滚动我的桌面视图(用一个长而快的手势)所以它会在屏幕上滚动显示我的单元格几秒钟(让我们说3-4秒) - 所以很快我点击了后退按钮回到上一个屏幕:它可以工作......然后滚动就会停止(在屏幕上我再也看不到了 - 所以3-4秒后):应用程序崩溃了!并且每次我做那个“花哨”的碰撞测试。
我使用了自己的表格查看单元格 - 我有点想到从哪里开始喜欢这个bug。我只能认为前一个视图试图“释放”显然不再显示的内容。
你们有没有经历过这个?或者你试过自己的“测试”应用程序,以确保它不会像我一样崩溃?
任何帮助指针当然都非常感激!
由于
干杯, geebee
EDIT1:感谢你的回答 - 我终于看到如果你把我的removeallobjects放在viewwilldisappear而不是viewDidDisappear方法中,就会发生这种情况...现在好了
答案 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;