2011-08-30 4 views
3

J'importe un dictionnaire JSON. J'ai besoin de connaître le nom des touches pour travailler avec.Clés dans un dictionnaire de JSON

Le dictionnaire est de charger le ok de données:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
[connection release]; 
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
[responseData release];  
    NSDictionary *results = [responseString JSONValue]; 
    NSLog(@"tenga: %@",results); 

mais lorsque je tente d'obtenir les noms des clés Les plantages d'applications:

NSArray * keys = [results allKeys]; 
NSLog(@"keys: %@",keys); ...} 

message d'erreur:

[__NSArrayM allKeys]: sélecteur non reconnu envoyé à l'instance 0x5a16b30 2011-08-30 22: 52: 26.171 Twitter Search [1906: 207] * en raison de l'application Mettre fin exception uncaught 'NSInvalidArgumentException', raison: '- [__ NSArrayM AllKeys]: sélecteur non reconnu envoyé à l'instance 0x5a16b30'

Pourquoi allKeys ne fonctionne pas?

Comment puis-je obtenir les noms de mes clés pour pouvoir commencer à travailler avec les objets?

modifier

Im en utilisant le http://code.google.com/p/json-frameworkStig Brautaset json framework

+0

Quelle sorte d'accident obtenez-vous? –

+0

Salut Tnx, j'ai ajouté l'erreur dans la question acclame – MaKo

+0

Aussi quel framework JSON utilisez-vous? –

Répondre

8

L'URL que vous avez obtenu cette chaîne JSON que vous avez donné un tableau, pas un objet-à-dire qu'il avait l'air quelque chose comme:

[ { "foo1" : "bar1" }, { "foo2" : "bar2" },... ] 

Notez les parenthèses [ ]. Dans cette situation, votre analyseur JSON vous a donné un NSArray en tant qu'objet de niveau supérieur (Objective-C). Vous avez besoin d'une logique comme:

id results = [responseString JSONValue]; 
if ([results isKindOfClass: [NSArray class]]) 
{ 
    // probably iterate through whtever is in it 
} 
else if ([results isKindOfClass: [NSDictionary class]]) 
{ 
    // dictionary at the top level. Hooray! 
} 
else 
{ 
    // something went horribly wrong, deal with it. 
} 
0

journal Publié dit que cet appel [responseString JSONValue] retours NSArray.

2

Ce que vous avez ici est le résultat n'est pas un NSDictionary mais plutôt un NSArray. NSArray n'a pas le sélecteur allKeys provoquant le crash. Si vous souhaitez publier plus d'informations sur le cadre JSON que vous utilisez, nous pourrions aider à la source de la question mieux

Questions connexes