Ответ таков: -initWithCapacity:
не делает то, что вы думаете, делает.Вы не получите массив с 16 пустыми слотами, в которые вы вставляете объекты в любой точке.Вы по-прежнему получаете пустой ([array count] == 0
) массив, и попытка вставить объект в любую позицию, кроме позиции 0, не удастся.Параметр Capacity просто дает подсказке времени выполнения о том, насколько велик может расти массив.
Чтобы в вашем массиве было 16 слотов, чтобы вы могли вставлять / заменять его при любом индексе <16, вам нужнодобавьте в него несколько объектов, например NSNull. </p>
NSMutableArray* myArray = [[NSMutableArray alloc] initWithCapacity: 16];
for (int i = 0 ; i < 16 ; ++i)
{
[myArray addObject: [NSNull null]];
}
// Now the array has a count of 16.
Я не совсем уверен, что вы пытаетесь сделать, но я подозреваю, что в вашем цикле for вы должны использовать -replaceObjectAtIndex:withObject:
вместо -insertObjectAtIndex: