每个部分的UITableView错误的单元格值

时间:2013-06-25 14:04:26

标签: uitableview

我有一个UITableView,在每个部分都有不同的行数。 我制作了该代码以尝试获得正确的结果:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *CellIdentifier= @"channel";
    ChannelsCell *cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(!cell) {
        cell =[[ChannelsCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    }

    NSInteger  rowsCountSection = [[arrayofChannelsCount objectAtIndex:indexPath.section] intValue];// this variable has the number of rows of every section

    NSUInteger pos = indexPath.section*count+ indexPath.row;

    cell.channelName.text=[arrayofChannelName objectAtIndex:pos];

    return cell;
}

我很确定这是一个数学问题。

感谢您的帮助。

编辑:

NSMutableArray *arrayofChannelsOffsets=[[NSMutableArray alloc]initWithCapacity:[arrayofChannelsCount count]];
    NSNumber* zero = [NSNumber numberWithInteger:0];
    [arrayofChannelsOffsets addObject:zero];

    for (int j=1; j<[arrayofChannelsCount count]; j++) {
            NSUInteger sum=(int)[arrayofChannelsOffsets objectAtIndex:j-1]+(int)[arrayofChannelsCount objectAtIndex:j-1];
            NSNumber* num = [NSNumber numberWithInteger:sum];
            [arrayofChannelsOffsets addObject:num];

            NSLog(@"%lu count offset:",(unsigned long)[arrayofChannelsOffsets count]);
            }

        for (int i= 0 ; i < indexPath.section ; i++) {
            pos =[[arrayofChannelsOffsets objectAtIndex:i] intValue] + indexPath.row;
               }
        cell.channelName.text=[arrayofChannelName objectAtIndex:pos];

我有一个奇怪的错误:

'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 267575552 beyond bounds [0 .. 101]'

从那个庞大的号码267575552那里来的。

2 个答案:

答案 0 :(得分:1)

在这种情况下,您需要在此之前的所有部分中累计行数,而不是使用indexPath.section*count

NSUInteger pos = indexPath.row;
for (int = 0 ; i < indexPath.section ; i++) {
    pos += [[arrayofChannelsCount objectAtIndex:i] intValue];
}
cell.channelName.text=[arrayofChannelName objectAtIndex:pos];

请注意,代码有点多余:它会为每个单元格反复重复相同的计算。您可以添加与NSArray *arrayofChannelsOffsets具有相同项目数的新arrayofChannelsCount,但不是包含单个计数,每个项目应包含小于当前项目的部分中的计数总和。使用类似的数组,您可以通过编写

来避免循环
NSUInteger pos = [[arrayofChannelsOffsets objectAtIndex:i] intValue] + indexPath.row;

答案 1 :(得分:0)

尝试:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

参考TableViewSuite