NSMutableArray removeObjectAtIndex:0表现不正常

时间:2011-09-08 03:04:45

标签: objective-c ios nsmutablearray

我有这个简单的方法将数组的第一个元素放在最后并将所有内容向下移动一个索引:

-(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];

注意包含注释A - 正如预期的那样。 行后

[newNotes removeObjectAtIndex:0];

newNotes仅包含注释A ---这不是预期的。注意A在索引0处,我可以从调试器中看到它。如果我改为

[newNotes removeObjectAtIndex:1];

newNotes仍然只包含注释A - 这是预料之中的,因为我在这种情况下删除了注释B.在我看来,我不能为我的生活从这个数组中删除注释A.我甚至尝试过:

[newNotes removeObject:note];

仍然有newNotes只包含注释A - 绝对是意料之外的。

任何见解都会令人惊叹。

1 个答案:

答案 0 :(得分:0)

试试这个:

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];