método de mutación enviado a object inmutable – error

NSUserDefaults *defaultDefects = [NSUserDefaults standardUserDefaults]; NSLog(@"%f %f", self.defectPositionX, self.defectPositionY); NSMutableArray *loadDefects = [defaultDefects objectForKey:@"defaultDefects"]; NSLog(@"%f %f", self.defectPositionX, self.defectPositionY); if (loadDefects == nil) { loadDefects = [NSMutableArray array]; } NSLog(@"%f %f", self.defectPositionX, self.defectPositionY); //PROBLEM HERE [loadDefects addObject:[NSNumber numberWithDouble:self.defectPositionX ]]; [loadDefects addObject:[NSNumber numberWithDouble:self.defectPositionY ]]; NSLog(@"%f %f", self.defectPositionX, self.defectPositionY); [defaultDefects setObject:loadDefects forKey:@"defaultDefects"]; NSLog(@"%f %f", self.defectPositionX, self.defectPositionY); [defaultDefects synchronize]; NSLog(@"%f %f", self.defectPositionX, self.defectPositionY); ViewControllerImage *secondViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerImage"]; secondViewController.thicknessValue1 = self.thicknessValue1; secondViewController.capWidthValue1 = self.capWidthValue1; NSLog(@"%f %f", self.defectPositionX, self.defectPositionY); [self presentViewController:secondViewController animated:YES completion:nil]; NSLog(@"%f %f", self.defectPositionX, self.defectPositionY); 

Registra esto

 2014-04-21 17:03:02.838 U[8958:60b] 169.728546 274.674475 2014-04-21 17:03:02.840 U[8958:60b] 169.728546 274.674475 2014-04-21 17:03:02.842 U[8958:60b] 169.728546 274.674475 

El informe de error completo es este

* Terminación de aplicación debido a exception no detectada 'NSInternalInconsistencyException', razón: '- [__ NSCFArray InsertObject: atIndex:]: mutación de método envió a object inmutable' * En primer lugar stack de llamadas tiro: (0x2e8e2f03 0x39077ce7 0x2e8e2e45 0x2e85642b 0xb93d3 0x311476c7 0x31147663 0x31147633 0x31132d7b 0x3114fa3d 0x31146c7d 0x31141ca7 0x31116e75 0x31115541 0x2e8adfe7 0x2e8ad4af 0x2e8abc9f 0x2e8167a9 0x2e81658b 0x337836d3 0x31175891 0xb7851 0x39575ab7) libc ++ abi.dylib: terminando con una exception no detectada de tipo NSException

Estoy confundido en cómo lo tengo como una matriz mutable, pero lo llama Inmutable, lo que significa que no puedo mutarla … Es la primera vez que me topo con este error y estoy luchando para comprenderlo.

Cuando ejecuto la aplicación y guardo los datos en la matriz mutable, a veces funciona y luego a veces se bloquea …?

El problema con la asignación a un NSMutableArray es, solo funcionará si a defaultDefects se le asignó un NSMutableArray para la key dada.

Nota: NSUserDefaults siempre devuelve un object inmutable.

Haz esto

 NSMutableArray *loadDefects = [[defaultDefects objectForKey:@"defaultDefects"]mutableCopy]; 

Esto garantiza una copy mutable.