2013-04-17 5 views
1

Je tente d'analyser une chaîne JSON dans un dictionnaire. Pour cette im en utilisant le code suivant:NSJSONSerialization non reconnu

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:json_string]; 

Cela me donne l'erreur suivante:

+[NSJSONSerialization JSONObjectWithData:]: unrecognized selector sent to class... 

Je cherchai dans la documentation des pommes et j'ai vu que la classe est inclus dans le cadre Foundation (j'ai ce cadre inclus dans mon projet). Je ne sais pas pourquoi cela arrive.

Une idée? Merci et salutations.

+0

Quelle version d'iOS essayez-vous d'utiliser? Cette option n'est disponible que dans les versions 5.0 et supérieures. – deanWombourne

+1

Ma documentation Apple ne connaît pas non plus cette méthode. Il sait 'JSONObjectWithData: options: error:' ... – Larme

+0

vous passez json_string à la place objet NSData –

Répondre

10

Vous avez oublié quelques arguments:

NSError *error; 
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:json_string options:0 error:&error]; 

et notez que le premier argument est un objet NSData, pas une chaîne.

+0

oui, c'est tout: je n'utilisais pas la même méthode. Quand je peux accepter cette réponse –

+0

@oPi: Je pense que vous devez attendre quelques minutes (peut-être 5, je ne sais pas), alors vous pouvez accepter en cliquant sur la coche. –

+1

Un changement très mineur suggéré: vous pouvez utiliser 'kNilOptions' au lieu de' 0' pour une meilleure lisibilité et une possible future-proofing, bien que cette utilisation de 0 soit assez peu susceptible de changer. (Il est déclaré dans MacTypes.h.) –

4

Le sélecteur complet est JSONObjectWithData:options:error:, il semble donc qu'il vous manque deux arguments. Essayez quelque chose de similaire à ceci:

NSError *error = nil; 
NSData *jsonData = [rawJSONString dataUsingEncoding:NSUTF8StringEncoding]; 
NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options: kNilOptions error:&error]; 

Notez que cela prend un argument dans NSData et non un argument NSString, et ne retournera pas toujours un NSDictionary, il pourrait être un NSArray ou un autre objet Fondation. En production, vous devriez vérifier l'argument error avant de croire que jsonObject est un objet valide.

4

Selon le documentation, vous devez d'abord convertir votre chaîne en un objet NSData et appeler la méthode de classe correcte de NSJSONSerialization. Vous pouvez effectuer les opérations suivantes:

NSData *stringData=[json_string dataUsingEncoding:NSUTF8StringEncoding]; 
NSError *jsonError=nil; 
NSDictionary *dictionary =[NSJSONSerialization JSONObjectWithData:stringData options:0 &jsonError]; 

Vérifiez le jsonError pour obtenir des conseils sur les problèmes éventuels. Si tout s'est bien passé, votre dictionnaire sera rempli avec les informations de json_string.