2012-02-08 3 views
0

Je reçois la réponse du serveur et l'analyse syntaxique comme ci-dessous pour ma requête synchrone.iPhone: problème avec le dictionnaire de réponses d'analyse syntaxique:

NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonError]; 
NSLog(@"responseDict: %@", responseDict); 

Le résultat est ci-dessous:

responseDict: { 
d =  { 
    Datavalue = 1; 
    "__type" = "Response:#DummyAPI"; 
    response = OK; 
}; 

Je suis en train d'analyser le résultat ci-dessus, si elle est « OK » je veux stocker le « dataValue » quelque part .. Je suis en train comme ci-dessous,

-(void) handleResponse :(NSDictionary *) responsedata // it is being passed from caller 
{ 
    NSString* value = NULL; 

    for (id key in responsedata) 
    { 
     value = (NSString*)[responsedata objectForKey:@"response"]; 

     if ([value isEqualToString:@"OK"]) 
     { 
      NSLog(@"RESPONSE SUCCESS, need to store data value"); 
     } 
     else 
     { 
      NSLog(@"INVALID RESPONSE"); 
     } 
    } 
} 

mais, il est toujours l'impression « rÉPONSE VALIDE », mais j'ai reçu une réponse comme « OK ». Qu'est-ce que je fais mal ici? S'il vous plaît donnez votre avis!

Merci!

Répondre

1

Il vous manque un niveau d'imbrication dans les dictionnaires que vous avez reçus. Votre réponse montre que responseData contient une clé appelée "d" dont la valeur est un autre dictionnaire, et que ce dictionnaire a une clé appelée "response"

Parce que vous travaillez dans une boucle, je suppose que votre réponse peut contenir plusieurs valeurs au niveau supérieur et pas seulement "d", et que vous essayez de parcourir chacune de ces valeurs. Basé sur cette hypothèse, vous voulez probablement quelque chose comme ceci:

-(void) handleResponse :(NSDictionary *) responsedata // it is being passed from caller 
{ 
    NSString* value = NULL; 

    for (id key in responsedata) 
    { 
     NSDictionary *currentDict = (NSDictionary *) [responseData objectForKey:key]; 
     value = (NSString*)[currentDict objectForKey:@"response"]; 

     if ([value isEqualToString:@"OK"]) 
     { 
      NSLog(@"RESPONSE SUCCESS, need to store data value"); 
     } 
     else 
     { 
      NSLog(@"INVALID RESPONSE"); 
     } 
    } 
} 
0

Semble bizarre pour moi et est probablement pas le problème, mais:

value = (NSString*)[responsedata objectForKey:@"response"]; 

if ([value isEqualToString:@"OK"]){ 
    NSLog(@"RESPONSE SUCCESS, need to store data value"); 
} 
else{ 
    NSLog(@"INVALID RESPONSE"); 
} 

Cela ne devrait pas être fait à l'intérieur d'une boucle. Essayez simplement ce code en dehors de la boucle for, cela devrait fonctionner. Autre chose que vous pourriez vouloir faire est d'appeler la méthode isKindOfClass sur la valeur pour @"response" et vous devriez obtenir quelque chose en disant que c'est une chaîne.

Questions connexes