Comment obtenir la valeur booléenne de JSON?
Suppose que c'est une valeur dans un JSON je veux attribuer à une variable BOOLEAN:
"retweeted": false
Voici comment j'ai analyser les données JSON:
NSError *error;
NSArray *timeline = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error];
Maintenant, j'ai un bool propriété définie comme:
BOOL *retweeted;
À l'intérieur de ma classe. Quand je le faire lors de l'analyse du JSON:
tweet.retweeted = [[[timeline objectAtIndex:i] objectForKey:@"retweeted"] boolValue];
J'obtiens cette erreur:
Comment résoudre ce problème?
boolean devrait être défini comme BOOL retweeted;
OriginalL'auteur Richard Knop | 2012-04-07
Vous devez vous connecter pour publier un commentaire.
c'est faux, les booléens sont des scalaires, pas Objective-C d'objets, de sorte qu'ils n'ont pas besoin d'être déclarées comme des pointeurs. Utilisation
à la place.
Knop avez-vous essayé avec NSLog(@"%@",self.retweeté?@"OUI":@"NO); ?
Oui, et vous avez de la chance avec elle! Parce que OUI = (BOOL)1 et N = (BOOL)0, mais NSLog à la recherche d'un objet lors de la rencontre d' %@, et si c'est 0 (=nil, null, null, etc.) puis imprime
(null)
. Si c'était pas nul, j'. e. OUI, il aurait essayé d'envoyer [(BOOL)1 description] et qui serait bloqué. Vous feriez mieux d'apprendre l'Objective-C avant de faire instane choses.Je l'ai utilisé plusieurs fois sans problèmes, mais votre point est toujours bon à savoir, merci pour vos éclaircissements.
Pas de problème, je suis content d'avoir pu vous aider.
OriginalL'auteur
Mon préféré façon de le faire est:
BOOL success = [[responseObject valueForKey:@"success"] boolValue]
Propre, concis et en ligne.
OriginalL'auteur metatheoretic
Après la sérialisation avec
NSJSONSerialization
le booléen est stocké comme unNSNumber
. Si vous regardez le type il stocke en fait est un__NSCFBoolean
mais qui n'a pas d'importance.NSNumber
est une classe abstraite qui n'existe pas. Le système stocke la valeur avec un béton de classe.Donc
NSNumber* boolean = [serializedDictionary valueForKey:@"boolValue"];
cela renvoie une
@0
pourNO
et@1
pourYES
. Vous pouvez utiliser est un booleanValue par:J'ai lu que NSNumber est le type d'une classe wrapper pour faire des int et double valeurs se comportent comme des objets. Il n'existe pas, mais comment il stocke les données dépend de la façon dont vous l'initialiser. Quand vous regardez le débogueur, vous pouvez voir différents types en fonction de la façon dont vous initialiser l'objet.
oui, mais ils sont tous les sous-classes os
NSNumber
.OriginalL'auteur doozMen