3

我有一个自定义的 tableview 单元格。但是当我想在我的 cellForRowAtIndexpath 中调用这个单元格时,它会给出以下错误。

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

如果一切都正确连接并正确命名,我检查了 100 次,但仍然没有发现问题所在。这就是我在代码中所做的。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"KlassementCell";

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

    // ask NSFetchedResultsController for the NSMO at the row in question
    Klassement *klassement = [self.fetchedResultsController objectAtIndexPath:indexPath];
    // Then configure the cell using it ...
    NSString *pointDiff = [NSString stringWithFormat:@"%@", klassement.goalsDiff];
    NSLog(@"position %@",klassement.position);
    NSLog(@"name %@",klassement.name);
    cell.lblPosition.text       = klassement.position;
    cell.lblName.text           = klassement.name;
    cell.lblgamesPlayed.text    = klassement.gamesPlayed;
    cell.lblGamesWon.text       = klassement.gamesWon;
    cell.lblGamesTied.text      = klassement.gamesTied;
    cell.lblGamesLost.text      = klassement.gamesLost;
    cell.lblGoalsPos.text       = klassement.goalsPos;
    cell.lblGoalsNeg.text       = klassement.goalsNeg;
    cell.lblGoalsDiff.text      = pointDiff;
    cell.lblPoints.text         = klassement.points;

    return cell;
}

有人可以帮忙吗?

亲切的问候。

4

5 回答 5

4

尝试

if ((cell == nil) || (![cell isKindOfClass: KlassementCell.class])) {

队列中返回的单元格可能不是 KlassementCell。

于 2012-10-08T13:28:01.507 回答
0

也许这对您的 viewDidLoad (或任何其他设置...)方法有帮助:

UINib* myCellNib = [UINib nibWithNibName:@"KlassementCell" bundle:nil];
[tableView registerNib:myCellNib forCellReuseIdentifier:@"KlassementCell"];

然后像这样实例化单元格

 cell = (KlassementCell*)[myCellNib instantiateWithOwner:nil options:nil];

myCellNib 应该在类范围内可用

于 2012-10-08T13:29:57.867 回答
0

您是否将“KlassementCell”笔尖中的 0 Index 对象的类设置为 KlassementCell 并映射了所有子视图?

如果没有,那就这样做,它可能会奏效。

于 2012-10-08T13:38:44.090 回答
0

确保在笔尖中单元格的类设置为“KlassementCell”并且标识符设置为“KlassementCell”。

您不需要做任何其他事情,因为在 cellForRowAtIndexPath 中只使用 1 种类型的 tableviewcell 和只有 1 个标识符

于 2012-10-08T13:54:20.750 回答
0

标识符必须与类名完全相同,因此两者都必须是“KlassementCell”。这样队列中就没有常规的可重用 UIcell。这也是if ((cell == nil) || (![cell isKindOfClass: KlassementCell.class])) {有效的原因,因为您确保没有将事物分配给常规单元格上不存在的属性,例如 lblPosition、lblName 和 lblgamesPlayed..

于 2013-05-31T07:24:40.637 回答