【问题标题】:fast table view scroll and back button hit快速表视图滚动和后退按钮点击
【发布时间】:2011-09-23 11:06:00
【问题描述】:

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

我使用了我自己的表格视图单元格 - 我有点不知道从哪里开始喜欢这个错误。我只能认为之前的视图试图“释放”一些显然不再显示的东西。

你们中有人经历过吗?或者您是否尝试过自己的应用程序进行“测试”以确保它不会像我的那样崩溃?

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

谢谢

干杯, 啧啧

EDIT1:感谢您的回答 - 我终于看到,如果您像我在 viewwilldisappear 而不是 viewDidDisappear 方法中那样将我的 removeallobjects 放入...现在一切都很好

【问题讨论】:

  • 不确定你在说什么 Nitish - 或者你在哪里看到的 - 以及我没有做什么来展示它 - 我 200% 肯定的是,如果没有 stackoverflow,我的应用程序将永远不会上线! !!非常感谢!

标签: iphone uitableview crash scroll back


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答 - 我终于看到,如果您像我在 viewwilldisappear 而不是 viewDidDisappear 方法中那样放置我的 removeallobjects 时会发生这种行为......现在一切都很好
【解决方案2】:

在后退按钮动作中检查这种情况。

例如

-(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 来检查按下按钮时表格是否正在滚动。

【讨论】:

  • 我明白你在说什么 - 所以在 tableview 停止之前后退按钮将不起作用 - 我会试一试...... THX A LOT Anand
【解决方案3】:

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

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

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

我的猜测是你会看到类似:“XXXX 消息发送到一个已释放的实例 [UIViewController XXXX]”

【讨论】:

  • 这听起来确实很有道理。我不知道如何处理你的僵尸评论,我需要把什么放在哪里?还是我需要尝试将视图保留更长时间...?
  • 这是您 XCode 项目中的设置。我真的建议你设置它。在 Google 上查找“NSZombieEnabled”以了解如何操作或在此处查看简要说明:stackoverflow.com/questions/5810931/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
相关资源
最近更新 更多