OK, je suis un peu confus. C'est probablement juste une banalité.
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 que j'utilise setValue:forKey:
ou setObject:ForKey:
, Je reçois toujours un avertissement:
"Passer l'argument 1 de l'ensemble ... crée un pointeur à partir d'un entier sans transtypage" ...
Comment diable puis-je insérer un bool dans un dictionnaire?
Les valeurs dans un NSDictionary
doivent être des objets. Pour résoudre ce problème, enveloppez les booléens dans des objets NSNumber
:
[parameters setValue:[NSNumber numberWithBool:news] forKey:@"news"];
[parameters setValue:[NSNumber numberWithBool:mails] forKey:@"mails"];
Les conteneurs Objective-C ne peuvent stocker que des objets Objective-C, vous devez donc envelopper votre BOOL dans un objet. Vous pouvez créer un objet NSNumber avec [NSNumber numberWithBool]
Et stocker le résultat.
Plus tard, vous pouvez récupérer votre valeur booléenne en utilisant -boolValue
De NSNumber.
Un BOOL n'est pas un objet - c'est un synonyme d'un int et a 0 ou 1 comme valeurs. Par conséquent, il ne sera pas placé dans une structure contenant des objets.
Vous pouvez utiliser NSNumber pour créer un wrapper d'objet pour n'importe quel type d'entier; il y a un constructeur [NSNumber numberWithBool:]
que vous pouvez invoquer pour obtenir un objet, puis l'utiliser. De même, vous pouvez l'utiliser pour récupérer l'objet à nouveau: [obj boolValue]
.
Code de référence moderne:
parameters[@"getNews"] = @(news);
Vous pouvez insérer @"YES"
ou @"NO"
les objets chaîne et Cocoa le lancera à bool une fois que vous les aurez relus.
Sinon, je suggère de créer un dictionnaire en utilisant la méthode d'usine comme dictionaryWithObjectsAndKeys:
.
En voyant la réponse de @Steve Harrison, j'ai un commentaire. Pour une raison quelconque, cela ne fonctionne pas avec le passage de propriétés d'objet comme par exemple.
[parameters setValue:[NSNumber numberWithBool:myObject.hasNews] forKey:@"news"];
Cela définit la clé news
sur null dans le paramètre NSDictionary
(pour une raison quelconque, je ne peux pas vraiment comprendre pourquoi)
Ma seule solution était d'utiliser la manière de @ Eimantas comme suit:
[parameters setValue:[NSNumber numberWithBool:myObject.hasNews ? @"YES" : @"NO"] forKey:@"news"];
Cela a fonctionné parfaitement. Ne me demandez pas pourquoi passer directement le BOOL
ne fonctionne pas mais au moins j'ai trouvé une solution. Des idées?