ошибка replaceObjectAtIndex? - PullRequest
2 голосов
/ 14 июля 2011

следующий код:

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

дает это

Завершение работы приложения из-за необработанного исключения «NSRangeException», причина: '-
[NSMutableArray replaceObjectAtIndex: withObject:]: индекс 10 за пределы пустого массива 'Стек вызовов при первом броске:

Ответы [ 2 ]

7 голосов
/ 14 июля 2011

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"];
2 голосов
/ 14 июля 2011

Получение массива с такой емкостью не заполняет его элементами; это все еще пустой массив, когда вы пытаетесь заменить объект с индексом 10. Если вы предоставите более подробную информацию о контексте, в котором это происходит, я могу попытаться предложить способ обойти проблему.

РЕДАКТИРОВАТЬ: если вам нужно иметь массив с объектами сразу, попробуйте это:

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

кроме 20 @"" вместо четырех. Тогда вы получите массив из 20 строк. Обязательно поставьте retain в конце, если вы используете его вне непосредственной области действия, так как arrayWithObjects возвращает автоматически освобожденный массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...