2011-07-18 3 views
0

J'ai cette fonction:remise à zéro étrange de NSMutableDictionary

- (NSMutableDictionary *) getUserDataDictionary 
{ 
    [userDataDicionary removeAllObjects]; 
    userDataDicionary = [[NSMutableDictionary alloc] initWithContentsOfFile:[self getUserDataDictionaryPath]]; 

    return userDataDicionary; 
} 

- (int) getIndexOfLastVehicle 
{ 
MyAppDelegate *app = (MyAppDelegate*)[[UIApplication sharedApplication] delegate]; 
NSMutableDictionary *tmpUserData = [app getUserDataDictionary]; 

int lastHighestIndex = -1; 

for(id item in [tmpUserData allKeys]){ 
    NSString *keyInArray = (NSString *)item; 

    if ([keyInArray rangeOfString:@"VEHICLE-"].location != NSNotFound) { 
     //f.e. "VEHICLE", "1", "TYPE"...or "VEHICLE", "1", "SPZ"...or "VEHICLE", "2", "TYPE" etc 
     NSArray * separatedComponents = [keyInArray componentsSeparatedByString:@"-"]; 
     int indexOfVehicle = [(NSString *)[separatedComponents objectAtIndex:1] intValue]; 

     if(indexOfVehicle > lastHighestIndex){ 
      lastHighestIndex = indexOfVehicle; 
     } 
    } 
} 

return lastHighestIndex; 
} 

Le problème est:
après ce code:

MyAppDelegate *app = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSMutableDictionary *tmpUserData = [app getUserDataDictionary]; 

int lastVehicleIndex = [self getIndexOfLastVehicle]; 

Le tmpUserData est VIDES.

Mais quand je l'ai changé pour cela:

int lastVehicleIndex = [self getIndexOfLastVehicle]; 

MyAppDelegate *app = (MyAppDelegate*)[[UIApplication sharedApplication] delegate]; 
NSMutableDictionary *tmpUserData = [app getUserDataDictionary]; 

Le tmpUserData est rempli correctement.

Quelqu'un peut-il expliquer ce comportement? Merci

+0

est-il 'nil' ou vide? –

Répondre

0

L'un des problèmes que vous réside dans la méthode getUserDataDictionary. Vous appelez removeAllObjects qui ne libère le userDataDictionary. Vous devez le libérer au lieu de removeAllObject. La version actuelle va libérer tous ses objets pour vous.

+0

Oui, c'était un problème. Merci à tous. – RichX

0

Je suis loin d'être un pro en Objective C, mais l'autre j'ai eu un problème similaire avec az NSMutableArray. Le problème dans mon cas était que quelque chose a été libéré ou inité une fois de plus que nécessaire.

Je suggère de mettre quelques NSLog() - s ici et là pour savoir où votre contenu va perdu. Je l'ai fait, je mets en fait un NSLog à chaque instruction impliquant mon objet, et enfin j'ai pu corriger les choses.

Juste une idée, sans doute ça aide.

0

Vous avez problème dans cette méthode:

- (NSMutableDictionary *) getUserDataDictionary 
{ 
    [userDataDicionary release]; 
    userDataDicionary = [[NSMutableDictionary alloc] initWithContentsOfFile:[self getUserDataDictionaryPath]]; 

    return userDataDicionary; 
} 
+0

BTW Selon la convention de codage d'Apple il y a une règle pour nommer les setters de propriétés comme 'setProperty' et getters comme 'propriété' donc il est préférable de renommer la méthode en userDataDictionary – voromax

Questions connexes