滚动tableview时获取EXC_Bad_Access

时间:2013-05-08 14:52:11

标签: ios objective-c uitableview exc-bad-access

我在滚动tableview时收到EXC_BadAccess错误消息。

以下是我在cellForRowAtIndexPath中完成的代码。

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

    static NSString *CellIdentifier=@"customCellHistory";

    customCellHistory *cell=(customCellHistory*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *topLevelObjects=[[NSBundle mainBundle]loadNibNamed:@"customCellHistory" owner:self options:nil];
        for (id currentObject in topLevelObjects) {
            if ([currentObject isKindOfClass:[UITableViewCell class]] ) {
                cell=(customCellHistory*)currentObject;
                break;
            }
        }
    }

    cell.lb11.text=[cellArray1 objectAtIndex:indexpath.row];
    cell.lbl2.text=[cellArray2 objectAtIndex:indexpath.row];

    return cell;
}

我可以感觉到问题是由于上述代码中的一些错误引起的。

我在上面的代码中使用了CustomCell来显示自定义单元格。

任何人都可以告诉我在这段代码中做了什么错误

4 个答案:

答案 0 :(得分:1)

嘿,请尝试以下代码,不要忘记自定义XIB中的set the cell identifiercustomCellHistory

在顶部

#import "customeCellHistory.h"

然后

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

    static NSString *cellIdentifier = @"customCellHistory";

    customCellHistory *cell = (customCellHistory *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"customCellHistory" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

    cell.lb11.text=[cellArray1 objectAtIndex:indexpath.row];
    cell.lbl2.text=[cellArray2 objectAtIndex:indexpath.row];

    return cell;
}

答案 1 :(得分:0)

问题似乎来自你所拥有的奇怪循环。使用最后一个对象方法从笔尖设置单元格。

答案 2 :(得分:0)

您正在重复使用单元格,然后更改循环中的单元格,这可能会导致单元格不存在于您正在查找的位置。

答案 3 :(得分:0)

if (cell == nil) {
    NSArray *topLevelObjects=[[NSBundle mainBundle]loadNibNamed:@"customCellHistory" owner:self options:nil];

您不需要该代码。只需在早期的表格视图中注册nib:

[self.tableView registerNib:[UINib nibWithNibName:@"customCellHistory" bundle:nil]
 forCellReuseIdentifier:@"customCellHistory"];

现在当你调用dequeueReusableCellWithIdentifier时,如果重用堆中没有备用单元,则将加载nib并传送单元。这可确保您始终拥有一个单元格,并确保它是正确的单元格。使用框架为您提供的方法。