Question

i have created a custom UITableViewCell, but when I dequeue the cell, sometimes it throws an NSInvalidArgumentException:

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

Now, my custom UITableViewCell does have an attribute lblMonth, so I am confused why it is throwing this error. Below is the code I use to dequeue the cell:

  -(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;
}

Please help me over this...Thanks in Advance

Was it helpful?

Solution

The problem lies in following line of code:

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

you should use

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

Because when you check for nil it will never be nil(it will not go in if case) and a UITableViewCell object is created not the custom cell object. But thats not what you want. You want to load cell from nib and dequeue it for reuse.

OTHER TIPS

See Your Code you need to change FewLines with Given Lines and rest stays same. This is Because you are making some Mistakes just Compare your code with below Code.

- (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];
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top