J'ai ce code et j'essaie de supprimer un élément d'un dictionnaire imbriqué, puis d'écrire le dictionnaire sur NSUserdefaults. Si je charge un nouveau pilote puis revenir en arrière et essayer de le supprimer, le programme se bloque. Voici mon code pour enlever.Suppression d'un élément du dictionnaire imbriqué
-(void)Remove:(id)sender
{
subsDict = [[[[[NSUserDefaults standardUserDefaults] objectForKey:@"Subs"]retain] mutableCopy]autorelease];
NSLog(@"%@",modelDict);
NSLog(@"Removing Size %@",driverSize);
[[[subsDict objectForKey:driverBrand]objectForKey:driverModel]removeObjectForKey:driverSize]; //Crashes here
[self updateSizes];
NSLog(@"New sizearray:%i",[sizeArray count]);
if ([sizeArray count] == 0)
{
[brandDict removeObjectForKey: driverModel];
[self updateModels];
NSLog(@"New modelarray count:%i",[modelArray count]);
NSLog(@"driver model: %@ Modelarray %@",driverModel, modelArray);
if ([modelArray count] == 0) {
[subsDict removeObjectForKey:driverBrand];
}
}
NSLog(@"New subdict:%@",subsDict);
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:subsDict forKey:@"Subs"];
[userDefaults synchronize];
}
Désolé, l'erreur de panne est - [NSCFDictionary removeObjectForKey:]: méthode de mutation envoyée à l'objet immuable. –
Il n'y a pas de déclaration pour brandsDict dans votre extrait de code - êtes-vous sûr qu'il s'agit d'une dictée modifiable ou avez-vous copié la copie comme vous l'avez fait avec subsDict? – Toastor