0

配列の要素にアクセスして、数値と変数 x を持つ配列があるようにそれらを変更しようとしています。配列を調べて、変数 x を値に置き換える必要があります。これを試しましたが、キャッチされていない例外 'NSRangeException' が原因でアプリを終了している for ステートメントでエラーが発生しました。理由: '*** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 2]'

 if( [stack containsObject:@"X"] )
    {
    int x;
    for(x=0; [stack objectAtIndex:x] ;x++)
    {
    [stack replaceObjectAtIndex:x withObject:[variableValues objectForKey:@"X"]];
    }
4

1 に答える 1

1

あなたが得ているエラーは何ですか?コードを見ると、いくつかのことが考えられます。配列の長さがゼロの場合、インデックス 0 でオブジェクトにアクセスするとエラーがスローされます。また、置換が機能するためには、配列が変更可能である必要があります。

-- update また、objectForKey が nil を返す場合、replacement メソッドで nil を置き換えようとすると、エラーがスローされます。以下の更新されたコードを参照してください。

if( [stack containsObject:@"X"] )
{
    assert([stack isKindOfClass:[NSMutableArray class]] );
    NSUInteger count = [stack count];
    for(NSUInteger x = 0; x < count ;x++)
    {
        id value = [variableValues objectForKey:@"X"];
        if ( value != nil )
        {
            [stack replaceObjectAtIndex:x withObject:value];
        }
    }
}
于 2012-07-10T06:26:22.647 に答える