0

このエラーが発生しています:

-[__NSArrayM objectAtIndex:]: index 556503008 beyond bounds [0 .. 2]'

アプリがクラッシュする場所は次のとおりです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSUInteger index = [[Data singleton].annotations objectAtIndex:indexPath.row];
    self.pinVC = [[PinViewController alloc]init];
    [self.pinVC setIdentifier:index];
    [[self navigationController]pushViewController:self.pinVC
                                      animated:YES];
 }

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.pinArray.count;
}

私は Objective C が初めてで、なぜこれが起こっているのかわかりません。誰かが私を助けることができますか?

4

3 に答える 3

2

変数がシングルトン配列でpinArrayの呼び出しと一致していない可能性があります。変数と同じタイプの情報が保持されているとobjectAtIndex:仮定すると、次のことを試すことができます。[[Data singleton].annotationspinArray

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    NSNumber *num = [self.pinArray objectAtIndex:indexPath.row];
    NSInteger index = [num integerValue]; //<-As an aside, observe I converted the number to integer type
    ...
    ...
}

アイデアは、配列内の注釈オブジェクトよりも多くの行数を返す可能性が高いため、境界を超えたエラーが発生するということです。

または、これを行う必要があります:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    NSNumber *num = [[Data singleton].annotations objectAtIndex:indexPath.row];
    NSInteger index = [num integerValue]; //<-As an aside, observe I converted the number to integer type
    ...
    ...
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    return [Data singleton].annotations.count;
}
于 2013-02-25T23:38:52.637 に答える
0

したがって、オブジェクトのインデックスを取得するつもりだったことに気付きましたが、オブジェクトがカスタム クラスのインスタンスである場合、オブジェクトを NSUInteger に割り当てていました。そのため、そのコード行を次のように変更しました。

NSUInteger index = indexPath.row;
于 2013-02-26T00:22:00.997 に答える
0

それはおそらくこの行です:

    NSUInteger index = [[Data singleton].annotations objectAtIndex:indexPath.row];

objectAtIndexオブジェクトを返しますが、結果をプリミティブに割り当てています(NSUIntegerこれは unsigned int の派手な名前です)。XCode がこの行で警告を表示しないことに驚いています。何に保存していannotationsますか?

エラー自体は範囲外のエラーです-ジェレミーがコメントで示唆しているように、インデックスパス自体である可能性があることを意味すると思いますが、配列の位置 556503008 にアクセスしようとしているという事実は、そうではないことを示唆しています。

于 2013-02-25T23:36:36.527 に答える