[编辑4]
user523234的好点
[favs removeObjectIdenticalTo: parent];
查看 Apple 网站上的 removeObjectIdenticalTo 以获取 NSMutableArray
https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html
[编辑3]
这是一个检查值(使用整数值)而不是对象本身的示例。
int erase = 0;
int i = 0;
while(i < favs.count){
if ([[favs objectAtIndex:i] intValue] == [parent intValue]){
[favs removeObjectAtIndex:i];
erase = 1;
}else{
i++;
}
}
[编辑2]
即使它没有首先删除它也可能添加对象的原因是因为您从未重置您的“擦除”变量。第一次设置为1,其余时间设置!!!您也永远不会初始化它,因此您永远不会“真正”知道编译器将在下一次调用您的操作时对变量做什么。如果它为您的擦除变量“分配”相同的内存地址,即使您尚未将其定义为静态变量,“1”仍将常驻创建静态条件!!!
[编辑]
本来没看懂你的问题。我想我现在明白了,更好地查看您的代码。
您的代码:
int erase = 0;
for(int i=0;i<favs.count;i++){
if ([favs objectAtIndex:i] == parent){
[favs removeObjectAtIndex:i];
erase = 1;
}
}
当您在每次删除后增加计数器时,您所做的基本上将跳过列表中的某些项目。假设您删除了对象 3,您的计数器现在将更新为计数 4,但 4 现在是 5,而 3 现在是 4,所以在这种情况下,您实际上是在跳过第 4 项。
尝试这个:
int erase = 0;
int i = 0;
while(i < favs.count){
if ([favs objectAtIndex:i] == parent){
[favs removeObjectAtIndex:i];
erase = 1;
}else{
i++;
}
}
如果您没有删除当前项目,这只会升级计数器。
[原文]
https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html
查看 removeObjectAtIndex 方法说明。
直接来自苹果:
“为了填补空白,所有超出索引的元素都通过从索引中减去 1 来移动。”
这应该在 Apple 的 API 中自动完成。你不应该做任何事情,而且真的不应该留下任何“漏洞”。