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

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

    return (NSArray*)newNotes;
}


数组注释包含两个Note *对象,即Note A和NoteB。
下线后

Note* note = [newNotes objectAtIndex:0];


注释包含注释A-符合预期。
下线后

[newNotes removeObjectAtIndex:0];


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

[newNotes removeObjectAtIndex:1];


newNotes仍然仅包含Note A-这是预料之中的,因为在这种情况下我将删除NoteB。在我看来,我终生无法从此数组中删除NoteA。我什至尝试做:

[newNotes removeObject:note];


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

任何见识都将是惊人的。

最佳答案

尝试这个:

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

07-26 04:01