Question

J'accéder à une URL RESTFUL et rentrerai résultats. Les résultats sont en JSON. Je tourne la réponse dans une chaîne via:

- (void)connectionDidFinishLoading:(NSURLConnection   *)connection {
NSString *json = [[NSString alloc] initWithBytes:[self.receivedData mutableBytes] length:[self.receivedData length] encoding:NSUTF8StringEncoding];

La variable json a une valeur de 0x0. Lorsque la souris I dessus, je vois <Invalid CFStringRef>. Comment puis-je déboguer ce à dire pourquoi il est invalide? Je rends le JSON rendu par le navigateur dans un analyseur de JSON. Cela vérifie bien.

Les résultats sont donnés de retour en entrant un ID dans l'URL. D'autres ID renvoient des résultats sans problème. Le jeu de résultats est assez grande.

Était-ce utile?

La solution

D'abord, j'utiliser initWithData:encoding: pour configurer le NSString. Petite différence, mais cette méthode est là pour une raison.

Alors, je ferais un hexdump de self.receivedData pour voir ce qui est réellement là-dedans. Si ces données ne sont pas correctement UTF8 codé alors le initWithData:encoding: échouera.

(Google pour vidage hexadécimal NSData pour trouver d'autres fonctions d'utilité des gens pour le faire)

J'ai trouvé que, parfois, les services Web sont bâclée avec leur encodage. Donc, je mets en œuvre une solution de repli habituellement comme ceci:

NSString* html = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
if (html == nil) {
    html = [[NSString alloc] initWithData: data encoding: NSISOLatin1StringEncoding];
    if (html == nil) {
        html = [[NSString alloc] initWithData: data encoding: NSMacOSRomanStringEncoding];
    }
}

Il est un peu triste que cela est nécessaire, mais de nombreux services web ne sont pas écrites ou correctement configuré.

Autres conseils

Utilisez NSLog pour regarder les octets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top