Как удалить в NSMutableArray - PullRequest
0 голосов
/ 02 мая 2011

У меня есть массив, в котором я храню разные классы, которые снова содержат разные массивы.Все массивы определены как NSMutabelArrays.

Когда я хочу удалить объект в массиве, мое приложение вылетает.Это мой код:

NSLog(@"string to be deleted:%@", [[[self.myLibrary objectAtIndex:self.currentNoteBookNumber] tabReference] objectAtIndex:tid]);
NSLog(@"string to be deleted:%@", [[[self.myLibrary objectAtIndex:self.currentNoteBookNumber] tabColours] objectAtIndex:tid]);
NSLog(@"string to be deleted:%@", [[[self.myLibrary objectAtIndex:self.currentNoteBookNumber] tabTitles] objectAtIndex:tid]);

[[[self.myLibrary objectAtIndex:self.currentNoteBookNumber] tabReference] removeObjectAtIndex:tid];
[[[self.myLibrary objectAtIndex:self.currentNoteBookNumber] tabColours] removeObjectAtIndex:tid];
[[[self.myLibrary objectAtIndex:self.currentNoteBookNumber] tabTitles] removeObjectAtIndex:tid];

И это вывод консоли:

2011-05-01 22:03:40.788 M[61452:207] string to be deleted:2
2011-05-01 22:03:40.789 M[61452:207] string to be deleted:Orange
2011-05-01 22:03:40.791 M[61452:207] string to be deleted:Art
2011-05-01 22:03:40.806 M[61452:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array'

Я действительно не знаю, что я делаю неправильно.Очевидно, что в массиве что-то есть, поэтому оно не должно быть 0. Я имею в виду, что это ЕДИНСТВЕННАЯ вещь, хранящаяся в массиве в данный момент, но это не должно быть проблемой, я полагаю?

Я был бы очень признателен за любую помощь в этом.


РЕДАКТИРОВАТЬ:

Я думаю, что я не предоставил достаточно кода,Это метод, в котором я настроил myLibrary:

-(void) setupLibrary {

myLibrary = [[NSMutableArray alloc] init];

NoteBook *newNoteBook = [[NoteBook alloc] init];

newNoteBook.titleName = @"TEST";

NSMutableArray *ttArray = [[NSMutableArray alloc] init];
[ttArray addObject:@"Art"];

NSMutableArray *tcArray = [[NSMutableArray alloc] init];
[tcArray addObject:@"Orange"];

NSMutableArray *trArray = [[NSMutableArray alloc] init];
[trArray addObject: [NSNumber numberWithInteger:2]];

newNoteBook.tabTitles = ttArray;
newNoteBook.tabColours = tcArray;
newNoteBook.tabReference = trArray;

[myLibrary addObject:newNoteBook];
currentNoteBookNumber = 0;

[newNoteBook release];
[ttArray release];
[tcArray release];
[trArray release];

}

Теперь кажется, что если я удаляю, например, один объект в массиве tabTitles (например, «Art»)Я удаляю весь объект newNoteBook.Т.е., когда я удаляю строку в tabTitles, все остальные строки в той же позиции в tabColours или tabReference также будут удалены.Почему это так?

Следующий код завершит работу после успешного удаления строки @ position 0 в массиве моего класса, который хранится в другом массиве:

    NSLog(@"string deleted:%@", [[[self.myLibrary objectAtIndex:0] tabReference] objectAtIndex:0]);
[[[self.myLibrary objectAtIndex:0] tabReference] removeObjectAtIndex:0];

NSLog(@"string deleted:%@", [[[self.myLibrary objectAtIndex:0] tabColours] objectAtIndex:0]);
[[[self.myLibrary objectAtIndex:0] tabColours] removeObjectAtIndex:0];

Ответы [ 2 ]

2 голосов
/ 02 мая 2011

Не знаю, в чем здесь проблема, но вы должны подумать о том, чтобы сохранить ваши массивы в безопасности:

if([yourArray count] > tid) {
    [yourArray removeObjectAtIndex.tid;
}
1 голос
/ 02 мая 2011

Ваша ошибка

-[NSMutableArray objectAtIndex:]: index 0 

говорит о том, что вы пытаетесь получить объект с индексом 0, а не удалить его.Так что я думаю, что вы назвали метод, в котором вы читаете и удаляете код 2 раза подряд.Попытайтесь увидеть, что это так.

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