我在UITableView上显示2个自定义单元格。我正在显示它们:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"StepsViewCell";
static NSString *simpleTableIdentifier2 = @"descViewCell";
if( indexPath.row == 0 ) {
UITableViewCell *cell = nil;
cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier2];
if( !cell ) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"descViewCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
cell.textLabel.text = [descLabel objectAtIndex:indexPath.row];
return cell;
}
else {
StepViewCell *cell = nil;
cell = (StepViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if( !cell ) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"StepsViewCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
cell.stepTextLbl.text = [stepLabel objectAtIndex:indexPath.row];
[cell.thumbImage setImage:[UIImage imageNamed: @"full_breakfast.jpg"] forState:UIControlStateNormal];
return cell;
}
}
我使用下面的代码计算它们,因为descViewCell始终为1。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [stepLabel count] +1;
}
这是有效的,但是当我向下滚动到UITableView的底部并且它崩溃时,我得到index (5) beyond bounds (5)
。我做错了什么?
答案 0 :(得分:4)
这是因为在- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
中,您为返回的结果添加了1。所以你的stepLabel
数组有5个元素(在索引0 - 4处)。但是当你为这个数字加1时,你的代码认为你有6行,它们在索引0 - 5处。所以你的- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法试图从只有5个元素的数组的索引5访问数据(因此,在索引4)结束。
您可以对代码进行以下更改以修复此崩溃:
cell.stepTextLbl.text = [stepLabel objectAtIndex:indexPath.row-1];
我认为这将完成您正在尝试的内容,因为如果行大于0,它看起来只会进入代码的这一部分。因此,这会将值向下移动1,以便您访问索引为0 - 4的数组。
答案 1 :(得分:1)
您的stepLabel
计数为5. numberOfRowsInSection:
返回6.此行:
cell.stepTextLbl.text = [stepLabel objectAtIndex:indexPath.row];
当indexPath.row = 5时,崩溃你的应用程序,因为没有stepLabel [5]。尝试使用
cell.stepTextLbl.text = [stepLabel objectAtIndex:(indexPath.row - 1)];