OK, je suis un peu confus. C’est probablement une sortingvialité.
J’ai une fonction qui ressemble à ceci:
- (void)getNumbersForNews:(BOOL)news andMails:(BOOL)mails { NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; [parameters setValue:news forKey:@"getNews"]; [parameters setValue:mails forKey:@"getMails"];...}
Peu importe si j’utilise setValue:forKey:
ou setObject:ForKey:
je reçois toujours un avertissement:
“Passer l’argument 1 de l’ensemble … fait un pointeur de l’entier sans lancer” …
Comment diable puis-je insérer un bool dans un dictionnaire?
Les valeurs d’un NSDictionary
doivent être des objects. Pour résoudre ce problème, NSNumber
les booléens dans les objects NSNumber
:
[parameters setValue:[NSNumber numberWithBool:news] forKey:@"news"]; [parameters setValue:[NSNumber numberWithBool:mails] forKey:@"mails"];
Les conteneurs Objective-C ne peuvent stocker que des objects Objective-C. Vous devez donc envelopper BOOL dans un object. Vous pouvez créer un object NSNumber avec [NSNumber numberWithBool]
et stocker le résultat.
Plus tard, vous pouvez récupérer votre valeur booléenne en utilisant -boolValue de -boolValue
.
Un BOOL n’est pas un object – c’est un synonyme pour un int et a 0 ou 1 comme valeurs. En conséquence, il ne va pas être mis dans une structure contenant des objects.
Vous pouvez utiliser NSNumber pour créer un wrapper d’object pour l’un des types d’entiers; il y a un constructeur [NSNumber numberWithBool:]
que vous pouvez appeler pour obtenir un object, puis l’utiliser. De même, vous pouvez l’utiliser pour récupérer l’object: [obj boolValue]
.
Code moderne pour référence:
parameters[@"getNews"] = @(news);
Vous pouvez insérer des objects de chaîne @"YES"
ou @"NO"
et Cocoa le lancera sur Bool une fois que vous les aurez lus.
Sinon, je suggère de créer un dictionnaire en utilisant la méthode de fabrique comme dictionaryWithObjectsAndKeys:
En voyant la réponse de @Steve Harrison, j’ai un commentaire à faire. Pour une raison quelconque, cela ne fonctionne pas avec les propriétés d’object passantes comme par exemple
[parameters setValue:[NSNumber numberWithBool:myObject.hasNews] forKey:@"news"];
Cela définit la clé de news
sur null dans le paramètre NSDictionary
(pour une raison quelconque, on ne comprend pas vraiment pourquoi)
Ma seule solution était d’utiliser la méthode de @ Eimantas comme suit:
[parameters setValue:[NSNumber numberWithBool:myObject.hasNews ? @"YES" : @"NO"] forKey:@"news"];
Cela a parfaitement fonctionné. Ne me demandez pas pourquoi le passage direct de BOOL
ne fonctionne pas, mais au moins j’ai trouvé une solution. Des idées?