Ordre dans un dictionnaire
belt
Membre
j'ai sauvé un dictionnaire dans un fichier .plist.
Avec Property List Editor, je constate que tout est OK et que les différentes {clés+valeurs} du dictionnaire sont bien dans le bon ordre.
Par contre, quand je charge les préférences, rien ne va plus, tout est dans le désordre.
Pour charger, je fais comme ci-dessous, alors si qq un voit où est le pb...
Merci d'avance.
NSUserDefaults *nspref = [ NSUserDefaults standardUserDefaults ] ;
NSDictionary *d = [ nspref dictionaryForKey: @clé dico ] ;
NSLog( @dict = %@", d ) ;
if ( d && [ d count ] )
{
NSEnumerator *e = [ d keyEnumerator ];
id key ;
while ( key = [ e nextObject] )
{
// traitement...
}
}
Avec Property List Editor, je constate que tout est OK et que les différentes {clés+valeurs} du dictionnaire sont bien dans le bon ordre.
Par contre, quand je charge les préférences, rien ne va plus, tout est dans le désordre.
Pour charger, je fais comme ci-dessous, alors si qq un voit où est le pb...
Merci d'avance.
NSUserDefaults *nspref = [ NSUserDefaults standardUserDefaults ] ;
NSDictionary *d = [ nspref dictionaryForKey: @clé dico ] ;
NSLog( @dict = %@", d ) ;
if ( d && [ d count ] )
{
NSEnumerator *e = [ d keyEnumerator ];
id key ;
while ( key = [ e nextObject] )
{
// traitement...
}
}
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
[tt]NSArray* sortedKeys = [[dico allKeys] sortedArrayUsingSelector:@selector(compare]; //ou caseInsensitiveCompare, suivant tes besoins
NSEnumerator* e = [sortedKeys objectEnumerator];
NSString* key;
while (key = [e nextObject]) {}[/tt]
Une petite remarque, le test [tt]Â if ( d && [ d count ] ) [/tt], si d vaut nil, [d keyEnumerator] aussi, et donc [e nextObject] aussi, la boucle ne sera donc pas exécutée. Si d existe et est vide, [e nextObject] vaudra nil au premier passage de la boucle, et donc rien ne sera fait.
Juste une remarque, si d vaut nil, le traitement n'est de toutes façon pas executé !
Cela dit, j'ai rajouté if ( d && [ d count ] ) pour ne pas l'executer dans le cas où le dico ne comporterait aucune entrée !
Mais ce test est fait de manière implicite par l'usage de l'énumérateur, donc dans ce cadre il ne sert à rien.