iOS - 加载自定义表格单元格会导致第二次加载时出错

时间:2011-10-23 09:58:03

标签: objective-c ios ipad uitableview

我正在使用带有标准单元格的表格视图的iPad应用程序,当选择自定义单元格时,它应该展开并加载自定义nib文件。对于第一次选择,这样做很好。

如果我选择一个标准单元格,它会很好地加载笔尖,如果我再次选择它会恢复正常,在第二次加载时会抛出EXC_BAD_ACCESS错误(我不认为我会得到xcodes错误,似乎是最抽象的。)

我的代码在下面,该行是它将单元格出列以便重复使用,第3行:

if([listCells objectAtIndex:indexPath.row] == @"open") {
        NSLog(@"Loading open cell at %i", indexPath.row);
        CustomMessageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomMessageCell"];
        //Loads the nib file and grabs the last object, presumably the table cell, as it is the only object in the file.
        if(cell==nil) {
            cell = [[[[NSBundle mainBundle] loadNibNamed:@"CustomMessageCell" owner:self options:nil] lastObject] autorelease];
        }
        UILabel *message = (UILabel *) [cell viewWithTag:1];
        UIButton *approve = (UIButton *)[cell viewWithTag:4];
        message.text = @"Test";
        return cell;

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

您是否编译并在真实设备上运行?有时您会获得更多信息,然后仅在模拟上运行。

还有其他要检查的事项:

  • 您应该检查IB中的Nib文件的标识符是否已设置 正确到CustomMessageCell。
  • 确保正确设置了IB中的子视图标识符。
  • 请注意,您不应该自动释放单元格,因为它已经被lastObject方法返回的自动释放。这可能会导致另一个崩溃的原因。

尝试运行你的应用程序(在真实设备上)并使用Zombies然后泄漏分析工具对其进行分析。 (而不仅仅是“运行”选择“个人资料”)。

希望这有帮助。

答案 1 :(得分:0)

你不应该autorelease单元格在这一行:

cell = [[[[NSBundle mainBundle] loadNibNamed:@"CustomMessageCell" 
                                 owner:self options:nil] lastObject] autorelease];

只需像这样创建:

cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomMessageCell" 
                               owner:self options:nil] lastObject];