为什么在将第6个元素插入tableview时会出现NSRangeException?

时间:2011-04-21 08:59:25

标签: iphone cocoa-touch uitableview nsmutablearray

我将数据插入表视图,如下所示。如果有超过6个App崩溃并且显示错误:

,则5到6个元素没有问题

"Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 11 beyond bounds [0 .. 10]' "

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
    return [ProductArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    }

       NSDictionary *aDict = [ProductArray objectAtIndex:indexPath.row];    
      cell.textLabel.text= [aDict objectForKey:@"ProductName"];


    return cell;
}

4 个答案:

答案 0 :(得分:1)

使用此代码

if(indexPath.row < [ProductArray count]){

NSDictionary *aDict = [ProductArray objectAtIndex:indexPath.row];
cell.textLabel.text= [aDict objectForKey:@"ProductName"];

}

答案 1 :(得分:0)

显然,崩溃消息表明您正在尝试访问超出数组可包含的元素限制的元素。请检查您是否正在更新tableview和数组中的numberOfRows。

答案 2 :(得分:0)

numberOfRowsInSection中,您必须为行数oldNumberOfRows + addedRowsNumber设置正确的数字。

编辑:

在将行添加到tableview之前,在ProductArray中添加每行的字典。

答案 3 :(得分:0)

该错误表明您正在尝试访问索引为11(第12个对象)或更高版本的NSMutableArray中仅包含11个对象的对象。数组索引从0开始,这可能是问题所在。尝试对ProductArray的大小执行NSLog并检查它拥有多少个对象。正如许多人在崩溃之前所说的那样,可能是numberofRowsInSection方法。如果您不想打扰ProductArray大小,只需返回一个固定的数字,看看其余的代码是否正常。