私はこの状況にあります
array = [[NSMutableArray alloc] initWithCapacity:4]; //in viewDidLoad
if (index == 0){
[array insertObject:object atIndex:0];
}
if (index == 1){
[array insertObject:object atIndex:1];
}
if (index == 2){
[array insertObject:object atIndex:2];
}
if (index == 3){
[array insertObject:object atIndex:3];
}
しかし、オブジェクトを順番に挿入すると、すべて問題ありません。代わりに、0と3の順に配列を埋めると、うまく機能しません。なぜですか?
容量が4であっても、インデックス3のNSMutableArray
にオブジェクトを挿入することはできません。可変配列には、オブジェクトの数と同じ数の使用可能な「セル」があります。可変配列に「空のセル」を含める場合は、[NSNull null]
オブジェクトを使用する必要があります。これは、データがないことを意味する特別なスタブオブジェクトです。
NSMutableArray *array = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < 4; ++i)
{
[array addObject:[NSNull null]];
}
[array replaceObjectAtIndex:0 withObject:object];
[array replaceObjectAtIndex:3 withObject:object];
Cスタイルでは、int a[10]
はサイズ10の配列を作成し、0
から9
までの任意のインデックスに任意の順序でアクセスできます。ただし、これはinitWithCapacity
またはarrayWithCapacity
には当てはまりません。これは、基盤となるシステムがパフォーマンスを向上させるために使用できるヒントにすぎません。これは、順不同で挿入できないことを意味します。サイズnの可変配列がある場合は、インデックス0
からn
まで、0
からn-1
は既存の位置用、n
は終了位置に挿入できます。したがって、0、1、2、3が有効です。ただし、0、3、または1,2の順序は無効です。
ランダムなインデックスを挿入することはできません。これを行う場合は、最初に配列をnullオブジェクトで初期化してから、replaceObjectAtIndexを呼び出します。