我有一个自定义的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;
}
有人可以帮忙吗?
亲切的问候。
答案 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 ..