2014-04-21 13 views
7
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); 

Logs questometodo mutando inviato a oggetto immutabile - errore

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 

Il rapporto di errore completo è questo

* Chiusura di applicazione a causa di eccezione non identificata 'NSInternalInconsistencyException', la ragione: '- [ __NSCFArray insertObject: atIndex:]: metodo di mutazione inviato all'oggetto immutabile ' * Primo stack di chiamate throw: (0x2e8e2f03 0x39077ce7 0x2e8e2e45 0x2e85642b 0xb93d3 0x311476c7 0x31147663 0x311 47633 0x31132d7b 0x3114fa3d 0x31146c7d 0x31141ca7 0x31116e75 0x31115541 0x2e8adfe7 0x2e8ad4af 0x2e8abc9f 0x2e8167a9 0x2e81658b 0x337836d3 0x31175891 0xb7851 0x39575ab7) libC++ abi.dylib: termina con eccezione non identificata di tipo NSException

Sono confuso da quanto ho come un array Mutevole tuttavia è chiamandolo significato immutabile non posso mutarlo .. È la prima volta che mi imbatto in questo errore e sto lottando per capirlo.

Quando si esegue l'app e si salvano i dati nell'array mutabile, a volte funziona e talvolta si blocca ...?

risposta

29

Il problema con l'assegnazione a un NSMutableArray è che funzionerà solo se a defaultDefect è stato assegnato un NSMutableArray per la chiave specificata.

Nota: NSUserDefaults restituisce sempre un oggetto immutabile.

fare questo, invece

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

questo garantisce una copia mutevole.

+2

NSUserDefaults * sempre * restituisce oggetti immutabili. Anche se un oggetto mutevole è archiviato. – LombaX

+0

Questo è corretto, grazie per la risposta e la spiegazione! –

+0

Notato. Grazie a @LombaX –

Problemi correlati