NSMutableArray removeObjectAtIndex: 0 не работает должным образом - PullRequest
1 голос
/ 08 сентября 2011

У меня есть этот простой метод, чтобы поместить первый элемент массива в конец и переместить все вниз на один индекс:

-(NSArray*)backUpNotes:(NSArray*)notes {
    NSMutableArray* newNotes = [NSMutableArray arrayWithArray:notes];
    Note* note = [newNotes objectAtIndex:0];
    [newNotes removeObjectAtIndex:0];
    [newNotes addObject:note];

    return (NSArray*)newNotes;
}

массив примечаний содержит два объекта Note *, примечание A и примечание B. после строки

Note* note = [newNotes objectAtIndex:0];

примечание содержит примечание А - как и ожидалось. После линии

[newNotes removeObjectAtIndex:0];

newNotes ТОЛЬКО содержит примечание A --- Этого НЕ ожидается. Примечание A находится в индексе 0, и я могу видеть это из отладчика. Если я вместо этого сделаю

[newNotes removeObjectAtIndex:1];

newNotes по-прежнему содержит только примечание A - это ожидается, так как я удаляю примечание B в этом случае. Мне кажется, что я не могу на всю жизнь удалить Note A из этого массива. Я даже пытался сделать:

[newNotes removeObject:note];

и до сих пор есть новые заметки, содержащие ТОЛЬКО примечание А - определенно неожиданное.

Любое понимание было бы удивительным.

1 Ответ

0 голосов
/ 08 сентября 2011

Попробуйте:

NSMutableArray* newNotes = [NSMutableArray arrayWithArray:notes];
for (Note *n in newNotes) {
    if ([n isEqual:note]) {
        [newNotes removeObject:n];
        break;
    }
}

Или:

int x = 0;
NSMutableArray* newNotes = [NSMutableArray arrayWithArray:notes];
for (Note *n in newNotes) {
    if ([n isEqual:note]) {
        break;
    }
    ++x;
}
[newNotes removeObjectAtIndex:x];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...