quitar un object de nsarray elimina todo

Tengo un nsarray de distinct nsmutablearray llamado: playerSkillsByLevelSnapshots. Al comienzo del código a continuación, la matriz contiene 6 objects.

NSArray *anArray2 = [playerSkillsByLevelSnapshots objectAtIndex:index]; playerSkills = [NSMutableArray arrayWithArray:anArray2]; [playerSkillsByLevelSnapshots removeObject:anArray2]; 

Cuando paso por encima de la línea final anterior, la matriz contiene 0 objects. ¿Alguien me puede explicar por qué podría ser así? Tenga en count que no hay inputs duplicadas en la matriz.

La única razón por la que esto podría suceder es si todos los objects de su matriz playerSkillsByLevelSnapshots son la misma matriz. Este es un error común: ocurre cuando agrega el mismo object de matriz a un set mutable en un ciclo mientras configura su matriz playerSkillsByLevelSnapshots , por ejemplo, así:

 NSMutableArray *playerSkillsByLevelSnapshots = [NSMutableArray array]; NSMutableArray *tmp = [NSMutableArray array]; for (int i = 0 ; i != 5 ; i++) { // add some objects, then... [playerSkillsByLevelSnapshots addObject:tmp]; [tmp removeAllObjects]; // Prepare to the new cycle } 

Puede solucionar este problema haciendo una copy de las matrices que coloque en playerSkillsByLevelSnapshots .

Otro problema con el método removeObject: es que elimina de la matriz todos los objects que son iguales a los que se eliminan, no solo a la primera instancia. Si existe la posibilidad de que su matriz playerSkillsByLevelSnapshots almacene objects que sean iguales entre sí, cambie a utilizar el método removeObjectAtIndex: lugar.