UITableView中的NSRangeException

时间:2013-10-29 08:20:59

标签: ios iphone ipad uitableview nsrangeexception

这是tableView:cellForRowAtIndexPath:方法中的代码,

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}

// Configure the cell...
NSDictionary *temp = [self.placeArray objectAtIndex:[indexPath row]];
cell.textLabel.text = [temp objectForKey:@"name"];
cell.detailTextLabel.text = [[temp objectForKey:@"distance"] stringByAppendingString:@" km from Banglore"];
cell.imageView.image =[UIImage imageNamed:[temp objectForKey:@"category"]];
return cell;

我得到例外,

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2]'

任何指针?

3 个答案:

答案 0 :(得分:1)

检查你的Tableview委托就像,

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

    return self.placeArray.count;
}

否则请告诉我......

答案 1 :(得分:1)

异常本身为您提供答案。 您的self.placeArray只包含3个元素,并且您尝试创建超过3个单元格。您需要确保self.placeArray的计数在numberOfRowsInSection方法中返回,并且当tableview重新加载时,此数组也不会异步更新。

答案 2 :(得分:1)

您在numberOfRowsForSection中返回的值大于placeArray中的对象数。

行后

NSDictionary *temp = [self.placeArray objectAtIndex:[indexPath row]];

添加此

NSLog(@"number of places = %i", [placeArray count]);

在该行添加断点。你会看到应用程序第四次碰到这个断点时会崩溃,因为numberOfRowsInSection正在返回> 3行,你的placeArray只有< = 3个对象