replace un object en NSMutableArray

Intento replace un object de mi matriz con una cadena. yo suelo

@property (strong, nonatomic) NSMutableArray *myArray; NSString *oldString = [NSString stringWithFormat:@"oldObject"]; NSString *toReplace = [NSString stringWithFormat:@"newObject"]; NSUInteger index = [self.myArray indexOfObject:oldString]; [self.firstLanguageArray replaceObjectAtIndex:index withObject:toReplace]; 

Pero cada vez que trato de replace, la aplicación se bloqueará.

Editar: registré el "índice". Me convertiré en un integer como 2147483647 .

Probablemente porque su llamada a indexOfObject devuelva NSNotFound .

NSNotFound es una constante que le dice que el object oldString no se encuentra en su dictionary self.myArray , y como esta constante tiene un valor de (NSUInteger)-1 (que es equivalente al valor sin signo 2147483647 debido al 2147483647 integer), el valor que obviamente bloqueará su aplicación con una exception de "Fuera de límites".

La solución es probar si el index != NSNotFound antes de usarlo. O para asegurarse de que su matriz self.myArray realmente contenga un object de tipo NSString cuyo valor sea "oldObject" .

Si, dado su código real, espera que oldObject esté presente en su self.myArray , luego piense de nuevo, quizás registre el contenido de self.myArray para search lo que realmente contiene, y también verifique que este contenido sea una cadena.
(si ve "oldObject" al registrar el contenido de su myArray , probablemente sea la cadena de description del object en su matriz, por lo que la matriz no contiene la cadena "oldObject" sí, sino un object cuya descripción es "oldObject" )


Nota al stringWithFormat : no hay necesidad de usar stringWithFormat si no usa ningún marcador de position de formatting (como %d o %@ etc). Simplemente debe usar directamente la constante de cadena en ese caso, no es necesario build dinámicamente una cadena si esa cadena es constante: simplemente use NSString* oldString = @"oldObject" y NSString* toReplace = @"newObject" .