2011-10-18 4 views
1

Lorsque j'essaie d'insérer un objet dans mon NSMutableArray, j'obtiens une erreur 'Program received signal: SIGABRT', mais je ne comprends pas pourquoi.'Signal reçu du programme: SIGABRT' lors de l'insertion d'objet dans NSMutableArray

Voici mon code, plus précisément le insertObject:value qui provoque l'erreur.

NSMutableDictionary *myDictionary = [NSMutableDictionary dictionary]; 
[myDictionary setValue:valueName.text forKey:kValueName]; 
[myDictionary setObject:subValuesList forKey:kSubValuesList]; 

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
int position = appDelegate.position; 

NSMutableArray *valuesList = [[NSUserDefaults standardUserDefaults] objectForKey:kValuesArray]; 
[valuesList insertObject:myDictionary atIndex:position]; 

Répondre

7

Les valeurs renvoyées par NSUserDefaults sont immuables, même si vous définissez un objet mutable comme la valeur.

Vous devez effectuer une copie modifiable après avoir récupéré la matrice à partir de NSUserDefaults. Heureusement pour vous, NSArray est conforme au protocole NSMutableCopying, il vous suffit d'envoyer un message mutableCopy au tableau:

NSMutableArray *valuesList = [[[NSUserDefaults standardUserDefaults] objectForKey:kValuesArray] mutableCopy]; 

Gardez à l'esprit que vous possédez l'objet retourné par mutableCopy selon le Memory Management Rules. En d'autres termes, vous devez le relâcher quand vous en avez fini.

+1

Merci beaucoup! A lutté avec un problème similaire depuis longtemps ... – iOSDev

Questions connexes