2011-07-14 8 views
2

次のコード
':replaceObjectAtIndexエラー?境界を越えてインデックス10 :[:withObject:NSMutableArrayのreplaceObjectAtIndex] -

NSMutableArray *kkk = [NSMutableArray arrayWithCapacity: 20]; 
[kkk replaceObjectAtIndex:10 withObject: @"cat"]; 

起因キャッチされない例外 'NSRangeException'、理由この

終了アプリをもたらします空の配列 'の最初のスローでの呼び出しスタック:

+0

ここでの問題は、あなたがオブジェクトを交換しようとしていますさ存在しない。 – EmptyStack

答えて

2

その容量の配列を取得することで要素。これは、インデックス10でオブジェクトを置換しようとすると、まだ空の配列です。これが起こっているコンテキストについて詳細を述べると、問題を回避する方法を提案することができます。

EDIT:20 @""年代の代わりに4を除いて

NSMutableArray *kkk = [NSMutableArray arraywithObjects: @"", @"", @"", @"", nil]; 

:あなたはすぐにオブジェクトの配列を持っている必要がある場合、これを試してみてください。次に、20文字列の配列を取得します。 arrayWithObjectsはオートレリースされた配列を返すので、直接スコープの外側で使用している場合は、末尾にretainを置いてください。

+0

配列を動的に構築するのを避けようとしています。その後、私は配列を埋めるでしょう。多分、満たすためのより良いルーチンがありますか? –

+0

なぜ動的に構築するのを避けようとしていますか?あなたはそれが何を保持するのか、それがどのように満たされているのかを説明できますか? –

+0

時間のために、私は動的にビルドしたくありません。私は初期サイズを初期化し、各インデックスに配置する要素を指定したいと思います。 –

7

arrayWithCapacity:は必要なメモリを割り当てますが、オブジェクトで配列を埋めていません。 nilは、配列を埋める有効なオブジェクトではありません。あなたは空のオブジェクトの配列を必要とするのであれば、あなたは、このような何かを行う必要があります

int size = 20; 
NSMutableArray *kkk = [NSMutableArray arrayWithCapacity:size]; 
for (int i = 0; i < size; i++) { 
    [kkk addObject:[NSNull null]]; 
} 

あなたが安全にオブジェクトを置き換えることができ、

[kkk replaceObjectAtIndex:10 withObject: @"cat"];