" ne fonctionne pas - Retrouvez les réponses et les commentaires concernant cette question" />
12
votes

iOS: comparer Nstring à "" ne fonctionne pas

Je prends un service Web qui retourne JSON . L'une des valeurs que je reçois est "" .

Lorsque j'exécute le code Follwoining, la déclaration si elle est toujours exécutée lorsqu'elle n'est pas supposée.

Une raison pour laquelle? xxx


0 commentaires

4 Réponses :


31
votes

Je prends un service Web qui retourne JSON. Une des valeurs que je reçois est ""

aha. Deux possibilités:

i. Le JSON ne contient pas d'informations de latitude et de longitude. Dans ce cas, les clés pour eux ne sont pas présentes dans le dictionnaire que vous revenez, vous obtenez donc en réalité un nil (ou null ). Comme la messagerie nil renvoie zéro, les deux conditions vont tirer (en raison de la négation appliquée). Essayez cela à la place: xxx

et ne s'appuie jamais sur la description d'un objet.

II. Probablement le JSON contient des valeurs null et l'analyseur JSON utilisez les virages null dans [nsnull null] , et à son tour vous êtes essayer de comparer une chaîne contre ce nsnull . Dans ce cas, essayez ceci: xxx


2 commentaires

@Anupdas merci. Je ne sais pas pourquoi quelqu'un pensait que c'est faux.


@Elimiller c'est la description de [nsnull NULL] . Vous devriez également lire la documentation de nslog () plus attentivement.



0
votes

Typiquement si vous obtenez NULL dans une réponse JSON, vous devez vérifier contre nsnull code>.

Dans votre cas, vous devriez faire quelque chose comme ceci: p>

if ( [location valueForKey:@"longitude"] == [NSNull null]) {
     // is null object
} 


3 commentaires

Veuillez ne pas comparer les objets en utilisant == .


"Pour tester une valeur d'objet nulle, vous devez donc faire une comparaison directe d'objet." - Directement de la documentation d'Apple. Ils font une comparaison directe d'objet en utilisant == avant d'utiliser ISequal. développeur.apple.com/library/ios / # documentation / cacao / concept ual / ...


@ H2CO3 - Je ne comparais presque jamais d'objets à l'aide de == sauf ceci ... Sauf si la documentation d'Apple n'a pas mal.



2
votes

J'ai eu le même problème, mais j'ai été résolu comme ci-dessous, Remplacez votre si avec suivant,

if (![latitude isKindOfClass:[NSNull class]] && ![longitude isKindOfClass:[NSNull class]])


0 commentaires

0
votes
if ([latitude isEqual:[NSNull null]])
{
 //do something
 latitude = @"";
}
else
{
 //do something else
 latitude = json value
}
This is what I will do. This is because I need to store the value even if  a null return.

0 commentaires