0

这是我在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]'

任何指针?

4

3 回答 3

1

检查您的 Tableview 代表是这样的,

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

    return self.placeArray.count;
}

不然告诉我...

于 2013-10-29T08:23:25.570 回答
1

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

行后

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

添加这个

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

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

于 2013-10-30T18:33:11.677 回答
1

异常本身为您提供了答案。您self.placeArray仅包含 3 个元素,并且您正在尝试创建 3 个以上的单元格。您需要确保self.placeArray's 计数在numberOfRowsInSection方法中返回,并且该数组在重新加载 tableview 时不会异步更新。

于 2013-10-29T08:33:24.413 回答