web-dev-qa-db-fra.com

Comment puis-je obtenir le corps NSURLResponse?

J'écris une application qui se connecte à un serveur en utilisant NSURLConnection.

Dans la méthode déléguée didreceiveresponse, si le code d'état est 404, j'annule la connexion et je voudrais afficher un message avec une erreur personnalisée générée sur le serveur.

Le problème est qu'à partir de l'objet de réponse, je ne peux obtenir que le code d'état, les en-têtes, le type MIME, etc. mais pas de corps.

Comment puis-je obtenir le message du corps de NSURLResponse?

31
telemaco

Pourquoi annulez-vous la connexion? Après tout, 404 peut également avoir un corps de contenu. Ne l'annulez pas et laissez le programme appeler la prochaine méthode déléguée NSURLConnection. Lorsque les données [le corps du contenu] sont envoyées - (void)connection:(NSURLConnection *) didReceiveData:(NSData *) est appelée, vous devez y récupérer les données. Lire la partie correspondante dans la documentation :

La réponse d'un serveur à une demande peut être vue en deux parties: les métadonnées décrivant le contenu et les données de contenu URL. Les métadonnées communes à la plupart des protocoles sont encapsulées par la classe NSURLResponse et se composent du type MIME, de la longueur de contenu attendue, du codage de texte (le cas échéant) et de l'URL qui a fourni la réponse.

Les classes NSURLConnection et NSURLDownload fournissent l'interface pour établir une connexion spécifiée par un objet NSURLRequest et télécharger le contenu. Un objet NSURLConnection fournit des données au délégué comme il est reçu de la source d'origine, tandis qu'un objet NSURLDownload écrit les données de la demande directement sur le disque. Les deux classes offrent une prise en charge étendue des délégués pour répondre aux redirections, aux défis d'authentification et aux conditions d'erreur.

Comme pour un exemple d'implémentation de délégué:

-   (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)theData{
    NSLog(@"String sent from server %@",[[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding]);

}
27
Özgür