Ok, ik ben een beetje in de war.
Het is waarschijnlijk gewoon een trivialiteit.
Ik heb een functie die er ongeveer zo uitziet:
- (void)getNumbersForNews:(BOOL)news andMails:(BOOL)mails {
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setValue:news forKey:@"getNews"];
[parameters setValue:mails forKey:@"getMails"];...}
Het maakt niet uit of ik setValue:forKey:
of setObject:ForKey:
gebruik, ik krijg altijd een waarschuwing:
“Doorgeven van argument 1 van set… maakt pointer van geheel getal zonder cast”…
Hoe voeg ik in hemelsnaam een bool in een woordenboek in?
Antwoord 1, autoriteit 100%
Waarden in een NSDictionary
moeten objecten zijn. Om dit probleem op te lossen, plaatst u de booleans in NSNumber
-objecten:
[parameters setValue:[NSNumber numberWithBool:news] forKey:@"news"];
[parameters setValue:[NSNumber numberWithBool:mails] forKey:@"mails"];
Antwoord 2, autoriteit 11%
Objective-C-containers kunnen alleen Objective-C-objecten opslaan, dus u moet uw BOOL in een object plaatsen. U kunt een NSNumber-object maken met [NSNumber numberWithBool]
en het resultaat opslaan.
Later kunt u uw booleaanse waarde terugkrijgen met -boolValue
van NSNumber.
Antwoord 3, autoriteit 8%
Moderne code ter referentie:
parameters[@"getNews"] = @(news);
Antwoord 4, autoriteit 6%
Een BOOL is geen object – het is een synoniem voor een int en heeft 0 of 1 als waarde. Als gevolg hiervan wordt het niet in een objectbevattende structuur geplaatst.
Je kunt NSNumber gebruiken om een object-wrapper te maken voor elk van de integer-types; er is een constructor [NSNumber numberWithBool:]
die je kunt aanroepen om een object te krijgen en dat vervolgens te gebruiken. Op dezelfde manier kun je dat gebruiken om het object weer terug te krijgen: [obj boolValue]
.
Antwoord 5, autoriteit 5%
Je kunt @"YES"
of @"NO"
tekenreeksobjecten invoegen en Cocoa zal het naar bool casten zodra je ze terugleest.
Anders stel ik voor een woordenboek te maken met behulp van de fabrieksmethode zoals dictionaryWithObjectsAndKeys:
.
Antwoord 6, autoriteit 2%
Als ik het antwoord van @Steve Harrison zie, heb ik één opmerking. Om de een of andere reden werkt dit niet met het doorgeven van objecteigenschappen zoals voor bijvoorbeeld
[parameters setValue:[NSNumber numberWithBool:myObject.hasNews] forKey:@"news"];
Dit stelt de news
-sleutel in op null in de parameter NSDictionary
(om de een of andere reden kan ik niet echt begrijpen waarom)
Mijn enige oplossing was om de manier van @Eimantas als volgt te gebruiken:
[parameters setValue:[NSNumber numberWithBool:myObject.hasNews ? @"YES" : @"NO"] forKey:@"news"];
Dit werkte perfect. Vraag me niet waarom het rechtstreeks doorgeven van de BOOL
niet werkt, maar ik heb in ieder geval een oplossing gevonden. Enig idee?