具有自定义tableview单元格的无法识别的选择器

时间:2012-10-08 13:17:41

标签: objective-c ios ios5 uitableview

我有一个自定义的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;
}

有人可以帮忙吗?

亲切的问候。

5 个答案:

答案 0 :(得分:4)

尝试

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

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

答案 1 :(得分:0)

也许这有助于你的viewDidLoad(或任何其他地方的设置...)方法:

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

然后像这样实例化单元格

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

myCellNib应该在类范围内可用

答案 2 :(得分:0)

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

如果没有,那么这样做可能会有效。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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