2009-07-10 5 views
29

Dans le code suivant, la première instruction de journal affiche une décimale comme prévu, mais la seconde enregistre NULL. Qu'est-ce que je fais mal?Création d'un dictionnaire NSDictionary

NSDictionary *entry = [[NSDictionary alloc] initWithObjectsAndKeys: 
    @"x", [NSNumber numberWithDouble:acceleration.x], 
    @"y", [NSNumber numberWithDouble:acceleration.y], 
    @"z", [NSNumber numberWithDouble:acceleration.z], 
    @"date", [NSDate date], 
    nil]; 
NSLog([NSString stringWithFormat:@"%@", [NSNumber numberWithDouble:acceleration.x]]); 
NSLog([NSString stringWithFormat:@"%@", [entry objectForKey:@"x"]]); 
+2

Sur une note sans rapport, les [NSString stringWithFormat:] bit est inutile et potentiellement dangereux. Vous devriez appeler NSLog comme ceci: NSLog (@ "% @", [entry objectForKey: @ "x"]) ;. Le premier paramètre de NSLog est une chaîne de format, qui devrait presque toujours être un littéral. –

Répondre

103

Vous échangez l'ordre dans lequel vous insérez des objets et clé: vous devez insérer d'abord l'objet, puis sur la touche comme le montre l'exemple suivant.

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil]; 
+1

Si vos valeurs sont placées dynamiquement, faites particulièrement attention si des valeurs sont nulles. Cela peut faire que la création de votre dictionnaire s'arrête au milieu, puisque 'nil' est sentinel dans la répartition des méthodes. Faites une validation si nécessaire. 'NSDictionary * dict = [[NDDictionary alloc]] initWithObjectsAndKeys: @" valeur1 "? Nil: @" ", @" key1 ", @" valeur2 "? Nil: @" ", @" clé2 ", nil];' –

5

NSDictionary Syntaxe:

NSDictionary *dictionaryName = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@value2",@"key2", nil]; 

Exemple:

NSDictionary *importantCapitals = [NSDictionary dictionaryWithObjectsAndKeys: 
@"NewDelhi",@"India",@"Tokyo",@"Japan",@"London",@"UnitedKingdom", nil]; 
NSLog(@"%@", importantCapitals); 

sortie ressemblant,

{Inde = NewDelhi; Japon = Tokyo; Royaume-Uni = Londres; }

14

nouveau Objective-c prend en charge cette nouvelle syntaxe pour l'initialisation statique.

@{key:value} 

Par exemple:

NSDictionary* dict = @{@"x":@(acceleration.x), @"y":@(acceleration.y), @"z":@(acceleration.z), @"date":[NSDate date]}; 
+0

' [NSNumber numberWithDouble: acceleration.x] 'peut être écrit plus court aussi comme' @ (acceleration.x) ' –

+0

@ Sega-Zero Merci. J'ai mis à jour la réponse. – Nemo

+0

cette syntaxe est idéale pour travailler avec JSON – EFE

Questions connexes