quitar objects de NSMutableArrays

Tengo este método que se llama cuando presiono un button y quita un object de los favores de MutableArray. Como deja agujeros en el Array, me encuentro con problemas más tarde. ¿Hay una manera fácil de eliminar esos "agujeros", o una mejor manera de eliminar objects?

- (IBAction)addfavs:(id)sender { int erase; for(int i=0;i<favs.count;i++){ if ([favs objectAtIndex:i] == parent) { [favs removeObjectAtIndex:i]; erase = 1; } } if (!erase) { [favs addObject:parent]; } 

}

[EDIT4]

Gran punto por el usuario523234

 [favs removeObjectIdenticalTo: parent]; 

Mire removeObjectIdenticalTo en el sitio de Apples para NSMutableArray

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html

[EDIT3]

Aquí hay un ejemplo de comprobación con el valor (usando un valor integer), en lugar del object en sí.

 int erase = 0; int i = 0; while(i < favs.count){ if ([[favs objectAtIndex:i] intValue] == [parent intValue]){ [favs removeObjectAtIndex:i]; erase = 1; }else{ i++; } } 

[EDIT2]

La razón por la que puede agregar un object, incluso si no se elimina primero, es porque nunca se restableció la variable "borrar". La primera vez que lo establece en 1, está configurado para el rest del time !!! Tampoco lo inicializas, por lo que nunca "realmente" sabes qué va a hacer el comstackdor con la variable la NEXT hora a la que se llama tu acción. Si "asigna" la misma dirección de memory a su variable de borrado, el "1" seguirá siendo residente creando una condición estática ¡aunque no la haya definido como una variable estática!

[EDITAR]

Originalmente no entendía su pregunta. Creo que lo entiendo ahora, echando un vistazo mejor a su código.

Tu codigo:

 int erase = 0; for(int i=0;i<favs.count;i++){ if ([favs objectAtIndex:i] == parent){ [favs removeObjectAtIndex:i]; erase = 1; } } 

Lo que está haciendo esencialmente SKIP ciertos elementos en la list a medida que incrementa su contador después de cada eliminación. digamos que eliminas el object 3, tu contador ahora se actualizará para contar 4, pero 4 ahora es 5 y 3 ahora es 4, por lo que básicamente estás saltando el elemento 4 en este caso.

Prueba esto:

 int erase = 0; int i = 0; while(i < favs.count){ if ([favs objectAtIndex:i] == parent){ [favs removeObjectAtIndex:i]; erase = 1; }else{ i++; } } 

Esto solo actualizará el contador si NO ha eliminado el elemento actual.

[ORIGINAL] https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html

Mira las notas del método removeObjectAtIndex.

Directo desde Apple:

"Para llenar la brecha, todos los elementos más allá del índice se mueven restando 1 de su índice".

Esto debería hacerse automáticamente dentro de la API de Apple. No deberías tener que hacer nada, y realmente no debería haber ningún "agujero" a la izquierda.

Cuando elimina un object de una matriz mutable, no "deja un agujero". Cada otro object en la matriz mutable simplemente se mueve una muesca hacia abajo y el recuento (o longitud) de la matriz se networkinguce por la cantidad de objects que eliminó.

Si ve "agujeros" en su interfaz de usuario, es posible que tenga problemas con los methods de actualización de la vista de tabla o, de lo contrario, muestre el contenido de la matriz. Pero la class base de la matriz mutable definitivamente sabe cómo lidiar con la eliminación y adición y administración de sus propios objects.

Eliminar un object de un NSMutableArray no deja huecos. La implementación de la matriz de Apple no es escasa, lo que significa que la matriz cambia de tamaño cuando elimina un object para que no haya espacios en blanco.

Además de la respuesta @trumpetlicks, también puedes probar esto:
Edición: versión más corta.

 if ([favs containsObject:parent]) //check for present of parent in the favs { [favs removeObjectIdenticalTo:parent]; //remove all occurrences of parent } else [favs addObject:parent];