Приложение iPhone падает - PullRequest
       5

Приложение iPhone падает

0 голосов
/ 27 апреля 2011

Когда я делаю следующее, мое приложение вылетает, и я получаю сообщение об ошибке (завершается вызовом после создания экземпляра NSException) каждый раз, когда я запускаю симуляцию:

for (...)
    [Array1 replaceObjectAtIndex:i withObject: [NSString stringWithFormat:@" Trip %i",i+1]]

OK после записи проблемы, которую я имеюобнаружил, что ошибка «0 выходит за границы пустого массива».

Ответы [ 3 ]

2 голосов
/ 27 апреля 2011

Вам действительно нужно опубликовать тип исключения и ваш код, чтобы дать нам разумный шанс решить вашу проблему . Тем не менее, я все равно собираюсь сделать попытку.

Полагаю, ваш код выглядит примерно так:

Array1 = [[NSMutableArray alloc] initWithCapacity: someNumber];

for (i = 0 ; i < someNumber ; ++i)
{
    [Array1 replaceObjectAtIndex:i withObject: [NSString stringWithFormat:@" Trip %i",i+1]];
}

Все массивы начинаются с 0 объектов, даже если вы используете -initWithCapacity:. Этот метод только подсказывает среде выполнения, что в какой-то момент массив увеличится до указанного размера. Вам нужно использовать -addObject:.

Редактировать

Да, от вашего редактирования я уверен, что я прав. Массив начался пустым, и вы пытаетесь заменить объект с индексом 0, которого пока нет.

Код выше следует изменить следующим образом:

array1 = [[NSMutableArray alloc] initWithCapacity: someNumber]; // fixed naming convention too :-)

for (i = 0 ; i < someNumber ; ++i)
{
    [array1 addObject: [NSString stringWithFormat:@" Trip %i",i+1]];
}

-addObject: добавляет новые объекты в конец массива.

Если вам нужно что-то, похожее на массив C или Java, вы можете предварительно заполнить массив NSNull объектами

array1 = [[NSMutableArray alloc] initWithCapacity: 6]; // fixed naming convention too :-)

for (i = 0 ; i < 6 ; ++i)
{
    [array1 addObject: [NSNull null]];
}

// Now the following will work
[array1 replaceObjectAtIndex: 4 withObject: @"foo"];
1 голос
/ 27 апреля 2011

Хорошо, вот предположение (я не могу сделать лучше без дополнительной информации):

Вы не можете изменить объект, для которого вы выполняете итерацию.

(плохо) Пример:

for (NSObject *obj in Array1){
    [Array1 replaceObjectAtIndex:i withObject: [NSString stringWithFormat:@" Trip %i",i+1]]
}
1 голос
/ 27 апреля 2011

если вы используете метод replaceObjectAtIndex с NSArray объектом типа массива, существует вероятность получения исключения (сбой).

Используйте NSMutableArray для управления изменяемым массивом объектов.

Хотя replaceObjectAtIndex также может быть вызвано следующее исключение для Объект и Индекс

Index : Повышает NSRangeException, если index находится за концом массива.

Объект: Повышает NSInvalidArgumentException, если объект, который вы передаете, равен нулю.

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