Удаление двух объектов из nsmutablearray - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть NSMutableArray с пятью объектами. Я хочу удалить два объекта при выполнении определенного условия. Но это дает мне ошибку ----- * Завершение приложения из-за необработанного исключения 'NSRangeException', причина: '* - [NSMutableArray objectAtIndex:]: индекс 3 за пределами [0 .. 2] ' Вот мой код

  -(IBAction)buttonPressed1:(id)sender{
for (int i = 0; i < [objectArray1 count]; i++) {

    if ([[objectArray1 objectAtIndex:3] isEqualToString:@"xyz"]) 
    {

        NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:3];
        [indexes addIndex:4];
        [objectArray1 removeObjectsAtIndexes:indexes];
        NSLog(@"Hello %@",objectArray1 );
  }
}

ЕСЛИ я удаляю условие {}, оно работает нормально. Любая помощь будет оценена.

Ответы [ 2 ]

4 голосов
/ 07 февраля 2012

Если вы хотите удалить объекты с индексами 3 и 4, как вы, похоже, делаете здесь, то не делайте это внутри цикла. Вы берете свой массив из 5 объектов и удаляете последние 2 объекта в нем в первый раз через цикл, оставляя вас с 3 объектами в вашем массиве. В следующий раз в цикле вы выполняете ту же проверку элемента с индексом массива 3, и у массива больше нет этого индекса, потому что вы его удалили.

0 голосов
/ 07 февраля 2012

Кажется, вы проходите цикл 4 раза.
Если условие истинно, условный код будет выполняться 4 раза.
Вы создаете индекс 4.
Вы удаляетеэто.
Во второй раз, когда вы удалите его, вы получите сбой.

Если я правильно понял, что вы хотите сделать, это код:

if ([[objectArray1 objectAtIndex:3] isEqualToString:@"xyz"] && 
   objectArray1.count == 5) {
   NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:3];
   [indexes addIndex:4];
   [objectArray1 removeObjectsAtIndexes:indexes];
   //less code:
   //[objectArray1 removeLastObject];
   //[objectArray1 removeLastObject];       
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...