[編集4]
user523234による素晴らしいポイント
[favs removeObjectIdenticalTo: parent];
NSMutableArrayについては、AppleのサイトでremoveObjectIdenticalToを参照してください。
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メソッドのメモを見てください。
Appleから直接:
「ギャップを埋めるために、インデックスを超えるすべての要素は、インデックスから1を引くことによって移動されます。」
これは、AppleのAPI内で自動的に実行される必要があります。あなたは何もする必要はないはずです、そして本当に「穴」が残っているべきではありません。