63 votes

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?

124voto

Steve Harrison Points 31062

Les valeurs en NSDictionary doivent être des objets. Pour résoudre ce problème, envelopper les booléens en NSNumber objets:

[parameters setValue:[NSNumber numberWithBool:news] forKey:@"news"];
[parameters setValue:[NSNumber numberWithBool:mails] forKey:@"mails"];

14voto

Vladimir Points 110327

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 l' -boolValue.

8voto

AlBlue Points 7768

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].

6voto

Eimantas Points 29052

Vous pouvez insérer @"YES" ou @"NO" chaîne de caractères objets et de 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:.

2voto

pechar Points 122

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

 [parameters setValue:[NSNumber numberWithBool:myObject.hasNews] forKey:@"news"];

Ceci définit l' news - clé null dans le paramètre NSDictionary (pour une raison quelconque ne peut pas vraiment comprendre pourquoi)

Ma seule solution a été d'utiliser @Eimantas de la façon suivante:

[parameters setValue:[NSNumber numberWithBool:myObject.hasNews ? @"YES" : @"NO"] forKey:@"news"];

Cela a fonctionné parfaitement. Ne me demandez pas pourquoi en passant l' BOOL directement ne fonctionne pas, mais au moins j'ai trouvé une solution. Des idées?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X