应用程序崩溃了两个自定义' UITableViewCell'在同一个' UITableView'

时间:2015-08-23 01:36:35

标签: ios objective-c uitableview unrecognized-selector

我有一个' UITableView'应该加载一个Custom' UITableViewCell'。当用户触摸其中一个单元格时,触摸的单元格将被另一个自定义单元格替换,并带有额外的信息标签。

但是,当用户触摸单元格时,应用程序会崩溃。它引发了以下异常:

  

' NSInvalidArgumentException',原因:' - [simplefiedCell cellInfo]:无法识别的选择器发送到实例0x7fb5b2f3d950'

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath的代码在哪里:

if(indexPath.row == self.selectedCell) {

    regularCell *cell = (regularCell *)[tableView dequeueReusableCellWithIdentifier:cellID1];

    [cell.cellInfo setText:@"Some temporally text to test this code"];


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

    return cell;

}else{

    simplefiedCell *cell = (simplefiedCell *)[tableView dequeueReusableCellWithIdentifier:cellID2];

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

    switch (indexPath.row) {
        case 0:
            [cell.cellTopic setText:@"Text1"];
            break;
        case 1:
            [cell.cellTopic setText:@"Text2"];
            break;
        case 2:
            [cell.cellTopic setText:@"Text3"];
            break;
        case 3:
            [cell.cellTopic setText:@"Text4"];
            break;
        case 4:
            [cell.cellTopic setText:@"Text5"];
            break;
        case 5:
            [cell.cellTopic setText:@"Text6"];
            break;
        default:
            break;
    }

    return cell;
}

我在(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath中使用的简单代码:

[tableView deselectRowAtIndexPath:indexPath animated:YES];

if (indexPath.row == self.selectedCell)
    self.selectedCell = -1;
else
    self.selectedCell = indexPath.row;

[self.tableView reloadData]; 

有谁知道发生了什么事?感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

乍一看,我怀疑问题不在您上面粘贴的代码中。可能是:

  • 您不小心为cellID1注册了简化细胞NIB,并且在您期待常规细胞时获得了简化的细胞类。
  • cellID1和cellID2的值相同,导致后来的注册获胜。
  • 您在regularCell XIB中指定了错误的自定义类,实际上是在实例化simpleCell类。

如果这三个都不是这种情况,那么我建议在XIB xml文件中搜索简化的单元类名称优先,然后在代码中搜索 - 无论你在哪里找到它,问问自己是否应该真的是那个地方的常规班。据推测其中一个应该是。