Objective-C dictionnaire de l'insertion d'un BOOL
OK, je suis un peu confus.
C'est probablement juste une trivialité.
J'ai une fonction qui ressemble à quelque chose comme ceci:
- (void)getNumbersForNews:(BOOL)news andMails:(BOOL)mails {
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setValue:news forKey:@"getNews"];
[parameters setValue:mails forKey:@"getMails"];...}
Il n'a pas d'importance si je utiliser setValue:forKey:
ou setObject:ForKey:
, je suis toujours un avertissement:
"Passing argument 1 de la série... qui rend pointeur d'entier sans un casting"...
Comment diable puis-je insérer un booléen dans un dictionnaire?
Vous devez vous connecter pour publier un commentaire.
Valeurs dans un
NSDictionary
doivent être des objets. Pour résoudre ce problème, envelopper les booléens dansNSNumber
objets:NSNumber *yesNumber = @YES
; équivalent à[NSNumber numberWithBool:YES]
@YES
et@NO
comme substituts pour[NSNumber numberWithBool:YES]
et[NSNumber numberWithBool:NO]
respectivement. Et comme @AlBlue souligné ci-dessous, le moyen de récupérer la valeur du dictionnaire plus tard serait d'utiliser[[myDictionary objectForKey:theKey] boolValue]
.Objective-C, les conteneurs peuvent stocker qu'Objective-C des objets si vous avez besoin de vous envelopper BOOL dans un objet. Vous pouvez créer un NSNumber objet avec
[NSNumber numberWithBool]
et stocker le résultat.Plus tard, vous pouvez obtenir votre valeur booléenne en arrière en utilisant NSNumber de
-boolValue
.Un BOOL n'est pas un objet - c'est un synonyme pour un int et a 0 ou 1 comme ses valeurs. En conséquence, il ne va pas être mis dans un objet contenant la structure.
Vous pouvez utiliser NSNumber pour créer un objet wrapper pour l'un quelconque des types d'entiers; il y a un constructeur
[NSNumber numberWithBool:]
que vous pouvez appeler pour obtenir un objet, et ensuite l'utiliser. De même, vous pouvez l'utiliser pour obtenir l'objet une fois de plus:[obj boolValue]
.Modernes code de référence:
Vous pouvez insérer
@"YES"
ou@"NO"
objets string et le Cacao sera de voter pour elle bool une fois que vous les lire.Sinon, je te suggère de créer dictionnaire à l'aide de méthode de fabrique, comme
dictionaryWithObjectsAndKeys:
.Voir @Steve Harrison réponse, je n'ai qu'un seul commentaire. Pour une raison quelconque, cela ne fonctionne pas avec le passage des propriétés de l'objet comme par exemple
Cela définit le
news
clé null dans le paramètreNSDictionary
(pour une raison quelconque ne peut pas vraiment comprendre pourquoi)Ma seule solution a été d'utiliser @Eimantas de la façon suivante:
Cela a fonctionné parfaitement. Ne me demandez pas pourquoi en passant la
BOOL
directement ne fonctionne pas, mais au moins j'ai trouvé une solution. Des idées?