1

我创建了一个自定义UITableViewCell,但是当我将单元格出列时,有时它会抛出一个 NSInvalidArgumentException:

  *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell lblMonth]: unrecognized selector sent to instance 0x6aa7df0     

现在,我的自定义UITableViewCell确实有一个属性 lblMonth,所以我很困惑为什么它会抛出这个错误。下面是我用来使单元格出列的代码:

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

        CustomCell *cell;

        cell = [(CustomCell*)[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

        if (cell == nil){

            NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"New_Phone" owner:nil options:nil];


            for(id currentObject in topLevelObjects)
            {
                if([currentObject isKindOfClass:[CustomCell class]])
                {
                    cell = (CustomCell *)currentObject;
                    break;
                }
            }
        }


           CGFloat emival= emi;
            CGFloat curinterest = balarray[indexPath.row] * interset;
            if(indexPath.row == tenure){
                emival = balarray[indexPath.row-1] + curinterest;
            }
            CGFloat curamnt = emival - curinterest;
        balarray[indexPath.row]=balarray[indexPath.row]-curamnt;


           [[cell lblMonth]setText:[NSString stringWithFormat:@"%d", indexPath.row+1]];
           [[cell lblEMI]setText:[NSString stringWithFormat:@"%.f", emival]];
           [[cell lblInterest]setText:[NSString stringWithFormat:@"%.f", curinterest]];
           [[cell lblPrinicipal]setText:[NSString stringWithFormat:@"%.f", curamnt]];
           [[cell lblBalance]setText:[NSString stringWithFormat:@"%.f", balarray[indexPath.row]]];

        return cell;
}

请帮我解决这个问题...在此先感谢

4

2 回答 2

2

问题在于以下代码行:

cell = [(CustomCell*)[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

你应该使用

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

因为当您检查 nil 时,它永远不会是 nil(如果出现这种情况,它将不会出现)并且创建 UITableViewCell 对象而不是自定义单元格对象。但这不是你想要的。您想从 nib 加载单元并将其出列以供重用。

于 2012-02-29T07:17:44.110 回答
0

查看您的代码,您需要使用给定的行更改 FewLines,其余部分保持不变。这是因为您犯了一些错误,只需将您的代码与下面的代码进行比较。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
 //below Line get cells if they Cells Exist.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//below Line Checking precrated Cells Exist
if (cell == nil) {
   cell = [(CustomCell*)[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault        reuseIdentifier:CellIdentifier];
}
于 2012-02-29T07:24:45.740 回答