我有一个UIView,并在其上放置了一个tableview,tableview使用从NSArray提供数据的自定义单元格。一些奇怪的事情发生在最多我只能得到表格显示2个单元格,即使那里有10个单元格,并且所有10个单元格都已填充。
我有一个不同的笔尖以同样的方式排列,它的工作非常完美。
正在发生的事情的截图(5是10个单元格中的第5个,所有单元格都填充了数据)。
http://img692.imageshack.us/img692/1465/screenshot20100708at215.jpg
-(UITableViewCell *)tableView:(UITableView *)tblView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"ISB points cellForRowAtIndexPath start");
NSLog(@"Elements in array = %d",[self.listData count]);
//
static NSString *cellID = @"PointsCellIdentifier";
PointsCustomCell *cell = [tblView dequeueReusableCellWithIdentifier:cellID];
if( cell == nil )
{
NSArray *nibObjects = [[NSBundle mainBundle]loadNibNamed:@"PointsCustomCell" owner:nil options:nil];
for( id currentObject in nibObjects )
{
NSLog(@"nibObjects count = %d", [nibObjects count]);
if( [currentObject isKindOfClass:[PointsCustomCell class]] )
{
cell = (PointsCustomCell *)currentObject;
}// if
}// for
}// if
if( indexPath.row < [listData count] )
{
RiderPointsData *riderPts = (RiderPointsData *)[listData objectAtIndex:indexPath.row];
cell.posLabel.text = riderPts.pos;
cell.nameLabel.text = riderPts.name;
cell.pointsLabel.text = riderPts.points;
cell.winsLabel.text = riderPts.wins;
//[riderPts release];
}
NSLog(@"ISB points cellForRowAtIndexPath end");
return cell;
}
答案 0 :(得分:1)
看起来你正在迭代你的笔尖中的所有对象,其中可能包含它包含的UITableViewCell和4个UILabel,并且只有部分时间是正确分配了单元格。
您不需要nibObjects
数组或for循环。如果您为loadNibNamed
提供owner
参数,则会将文件所有者设置为该值。如果您的numberOfRowsInSection方法返回indexPath.row < [listData count]
,您也不需要[listData count]
检查。所以将代码更改为:
-(UITableViewCell *)tableView:(UITableView *)tblView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellID = @"PointsCellIdentifier";
PointsCustomCell *cell = [tblView dequeueReusableCellWithIdentifier:cellID];
if( cell == nil )
{
[[NSBundle mainBundle]loadNibNamed:@"PointsCustomCell" owner:self options:nil];
// assign IB outlet to cell
cell = self.cellOutlet; // cellOutlet should be whatever you name your IBOutlet
self.cellOutlet = nil;
}// if
RiderPointsData *riderPts = (RiderPointsData *)[listData objectAtIndex:indexPath.row];
cell.posLabel.text = riderPts.pos;
cell.nameLabel.text = riderPts.name;
cell.pointsLabel.text = riderPts.points;
cell.winsLabel.text = riderPts.wins;
return cell;
}
和
答案 1 :(得分:0)
看起来listData中的一些数据是NULL。 你如何填充listData?我想如果你添加这两行并让我们看看控制台输出会更好。
//add this line in tableView:cellForRowAtIndexPath:
NSLog(@"indexPath.row = %d listData.count = %d ",indexPath.row,[listData count]);
//add this line in if( indexPath.row < [listData count] )
NSLog(@"RiderPointsData = %@ %@", riderPts,[riderPts class]);