NSMutableArray removeObjectAtIndex

Recibo el siguiente error al eliminar de mi NSMutableArray

-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance 0x1cdced10 2011-07-13 00:33:14.333 MassText[1726:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance 0x1cdced10' 

Sin embargo, justo antes de eliminarlo, imprimo la matriz y el índice. Tampoco son nulas y no tengo ninguna razón para creer por qué estaría sucediendo este error. ¿Algunas ideas?

Tuve este problema Lo mío fue que accidentalmente usé el casting de tipo como este.

 NSMutablearray * myarray = [[NSMutableArray alloc] init]; myarray =(NSMutableArray*) [mydictionary allkeys]; 

Esto funcionará por algún time … pero si estás en un ciclo apretado y grande, esto tiende a fallar.

Cambié mi código a

 NSMutableArray * myarray= [[NSMutablearray alloc] initWithArray:[mydictionary allKeys]]; 

El object es un NSArray , no un NSMutableArray .

Estás llamando a removeObjectAtIndex en una instancia de NSArray. Podemos ver claramente su logging de locking.

En este punto, cuatro personas inteligentes (sin -removeObjectAtIndex: ) han señalado que estás enviando -removeObjectAtIndex: a un object que cree que es una matriz inmutable. Este sería un buen momento para comenzar a preguntarse por qué la matriz es inmutable cuando pensabas que era mutable. Si publica algún código que muestra cómo se crea la matriz, alguien aquí probablemente podrá mostrarle lo que está mal.

Una forma en que puede terminar con una matriz inmutable cuando pensó que tenía una mutable es copyr una matriz mutable. Por ejemplo, puede tener una propiedad:

 @property (copy) NSMutableArray *myArray; 

Quizás luego creas una matriz mutable, agregas algunos objects y la asignas a tu propiedad:

 NSMutableArray *tempArray = [NSMutableArray array]; [tempArray addObject:@"You say goodbye"]; [tempArray addObject:@"I say hello"]; self.myArray = tempArray; 

Ahora, ¿tempArray apunta a una matriz mutable o una matriz inmutable? No he probado recientemente, pero estoy bastante seguro de que obtienes una matriz inmutable. Definitivamente obtienes un array inmutable si dices:

 NSMutableArray *foo = [tempArray copy]; 

Entonces, comience a search lugares en el código donde se reasigna el puntero de matriz. Después de todo, si su puntero apuntaba realmente a una matriz mutable, sería muy difícil explicar la exception que está recibiendo.

El error indica que está intentando llamar al selector removeObjectAtIndex en un NSArray , que no responderá a ese selector.

Asegúrese de que la matriz sea realmente un NSMutableArray , no un NSArray .

Tuve el mismo problema, y ​​fue por el uso del método de copy. Hice uno solo devolviendo NSMutableArray * y funcionó.