Objective-C-woordenboek dat een BOOL invoegt

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 NSDictionarymoeten 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 -boolValuevan 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 BOOLniet werkt, maar ik heb in ieder geval een oplossing gevonden. Enig idee?

Other episodes