【问题标题】:Iphone SDK -- troubles with custom UITableViewCell NibIphone SDK——自定义 UITableViewCell Nib 的问题
【发布时间】:2010-08-06 06:49:39
【问题描述】:

我创建了自己的笔尖,并为它上课。我将所有控件连接到界面生成器中的类。当我运行它时,它运行良好。唯一的问题是,当我滚动 tableview 时它崩溃了。任何想法可能是什么错误?我一直试图解决这个问题一段时间无济于事。它给出了一个 EXC_BAD_ACCESS,我不确定如何调试。

int cellType = [streamDataProvider cellTypeForIndex:indexPath.row];

if(cellType == HOP_GRAFITTI){
    static NSString *CellIdentifier = @"HopGrafittiStreamCell";
    HopGrafittiStreamCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"HopGrafittiStreamCell" owner:self options:nil];
        cell = (HopGrafittiStreamCell *)[nib objectAtIndex:0];
        [cell retain];
    }

    [cell.username setText: [streamDataProvider userNameForIndex:indexPath.row]];
    [cell.venuename setText: [streamDataProvider venueNameForIndex:indexPath.row]];        
    [cell.grafittiText setText: [streamDataProvider grafittiForIndex:indexPath.row]];                
    return cell;
}

【问题讨论】:

  • 没关系——事实证明 streamDataProvider 有一个内部对象没有被保留并被垃圾回收
  • 您可以使用 Instruments 中的 Zombies 工具来调试这样的崩溃。

标签: iphone cocoa-touch uikit nib


【解决方案1】:

如果您再次需要它,这里有一种通过设置符号断点来调试 EXC_BAD_ACCESS 错误的有用方法。如果在调试模式下运行,调试器将在 EXC_BAD_ACCESS 处中断,让您有机会查看堆栈跟踪并找出导致问题的原因:

  • 打开调试窗口
  • 打开右上角的断点窗口(显示断点
  • 双击显示“双击符号”的行
  • 输入 objc_exception_throw 并按回车键

您可以将其永久保留在您的项目中,因为每次遇到 EXC_BAD_ACCESS 错误时它都会有所帮助。

希望对你有帮助

【讨论】:

  • EXC_BAD_ACCESS 不是 Objective-C 异常,它是 kernel 异常——即进程彻底崩溃。你可以在任何程序中得到它,无论它是否使用 Obj-C 运行时;一个普通的 C 程序可以产生这样的崩溃。无论如何,这都会使调试器跳闸;无需设置断点。此外,调试器对于在 Objective-C 应用程序中调试 EXC_BAD_ACCESS 不是很有帮助,它通常指示发送到死对象的消息。在这些情况下,僵尸仪器对于追查对象错误死亡的原因更为有用。
猜你喜欢
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
相关资源
最近更新 更多