1

我有一个 MutableArray 填充了数据库中的值:

NSMutableArray *objectsArray = [[NSMutableArray alloc] init];
for (int n=0; n<[self.array count]; n++) {
    [objectsArray addObject:[[self.array objectAtIndex:n] objectForKey:@"Name"]];
    [objectsArray addObject:[[self.array objectAtIndex:n] objectForKey:@"Name_En"]];
}

我在标签上显示值,如下所示:

cell.textLabel.text = [[[dic objectForKey:@"d"] objectAtIndex:indexPath.row] objectForKey:@"Name"];
cell.detailTextLabel.text = [[[dic objectForKey:@"d"] objectAtIndex:indexPath.row] objectForKey:@"Name_En"];

到目前为止,该应用程序运行良好。它开始时不会引发异常,并且值在标签中。但是,如果我开始滚动应用程序崩溃,我会收到以下错误:

Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (5) beyond bounds (5)'

为什么会出现这个错误?

4

3 回答 3

1

您可能在说表格有 6 行,但实际上有 5 行。此异常的原因是表格视图请求indexPath.row值为 5 的单元格,这意味着它认为有 6 [0:5]行,但您在字典中的数组有 5 个项目 [0:5)。

于 2012-06-06T09:04:34.443 回答
0

我遇到了你前面提到的同样的问题。然后我这样做了:-

cell.TitleLabel.text=[[AllUserDataArray objectAtIndex:indexPath.row]objectAtIndex:0];
cell.DateAndTimeLabel.text=[[AllUserDataArray objectAtIndex:indexPath.row]objectAtIndex:1];
cell.InfoLabel.text=[[AllUserDataArray objectAtIndex:indexPath.row]objectAtIndex:2];
if([[AllUserDataArray objectAtIndex:indexPath.row] count] >3) {

 NSData *imageData=[[AllUserDataArray objectAtIndex:indexPath.row]objectAtIndex:3];
 UIImage *travelImage=[UIImage imageWithData:imageData];
 cell.ImgView.image=travelImage;

它工作正常且逻辑正确(我认为是这样):)

希望这会帮助你。

于 2016-07-29T09:53:33.187 回答
0

我面临同样的问题,我得到了解决方案:

NSMutableArray *objectsArray = [[NSMutableArray alloc] init];

objectsArray=nil;

for (int n=0; n<[self.array count]; n++) {
    [objectsArray addObject:[[self.array objectAtIndex:n] objectForKey:@"Name"]];
    [objectsArray addObject:[[self.array objectAtIndex:n] objectForKey:@"Name_En"]];
}
于 2016-09-29T05:37:48.610 回答