2012-10-08 91 views
3

无法识别的选择我有一个自定义的tableview细胞。但是当我想在我的cellForRowAtIndexpath中调用这个单元格时,它会给出以下错误。定制的tableview细胞

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

我检查了100次,如果everthing正确连接并命名正确,但仍然没有发现什么是错的。这就是我在代码中所做的。

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

尝试

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

队列返回可能不KlassementCell细胞。

+0

,我应该把这个? – Steaphann

+1

Oké这个工程,但你能说为什么这有助于?因为我在此错误 – Steaphann

+1

搜索了几个小时我猜的iOS具有可重复使用的UICell(这不是一个KlassementCell)在队列中,并提供它,当你调用dequeueReusableCellWithIdentifier。但是,我不明白为什么它排在队列中。 – jptsetung

0

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

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

然后实例这样

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

myCellNib细胞应在提供类范围

0

你有设置班“KlassementCell”笔尖为KlassementCell 0 Index对象中映射所有的子视图?

如果没有那么做,它可能工作。

0

确保在该类细胞被设置为“KlassementCell”,也该标识符为“KlassementCell”笔尖。

你不应该需要做任何事情,因为只使用1型tableviewcell的只有1中的cellForRowAtIndexPath标识符

0

的标识必须是完全相同的类名,所以两者必须“KlassementCell” 。这样,队列中就没有常规的可重用UIcell。这也是为什么if ((cell == nil) || (![cell isKindOfClass: KlassementCell.class])) {作品,因为你要确保你是不是不喜欢上lblPosition,lblName和lblgamesPlayed一个普通小区中存在的属性分配的东西..