UITableView返回EXC_BAD_ACCESS

时间:2011-02-25 00:52:31

标签: iphone cocoa-touch uitableview

现在tableView加载但是当我尝试向下滚动表时应用程序崩溃了。继承我的代码:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@"ince mal");
    NSLog(@"%f", i);

    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                reuseIdentifier:@"cell"];
    }

    // fill it with contents
    TFHppleElement * element = [searchResults objectAtIndex:indexPath.row];
    NSString * tagContent = [element content];
    cell.textLabel.text = tagContent;

    return cell;
}

4 个答案:

答案 0 :(得分:2)

您尚未分配元素,并尝试将其释放。这就是问题。

从代码中删除[element release]

任何具有保留计数0的对象都会被释放,然后它会崩溃。

设置NSZombieEnabled以检查哪个对象被释放。

编辑:

也删除这一行,

if (i == indexPath.row) {
    return nil;
}

[tagContent release];

如果你想要一个空单元格,则返回as,

if (i == indexPath.row) {
        return cell;  //Before adding any cell contents.
    }

答案 1 :(得分:0)

永远不要这样做(这会导致另一次崩溃(断言失败)):

if (i == indexPath.row) {
    return nil;
}

关于你的崩溃:

[element release];
[tagContent release];

删除这些行

答案 2 :(得分:0)

我在这些代码中没有看到任何不好的东西。内容填充线可能会导致一些问题。我甚至在你的问题中找不到任何版本。每当您尝试滚动时,CellForRow都会被触发。因此,检查数组,以访问其对象。

答案 3 :(得分:0)

您的TableView没有任何问题,只有您使用它的方式。在您使用它的类中,它被分配,初始化和显示。但是我敢打赌你没有指向它,以防止它被垃圾收集。