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 に答える