31

J'écris une application qui se connecte à un serveur en utilisant NSURLConnection.Comment puis-je obtenir le corps NSURLResponse?

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

Le problème est que de l'objet de réponse, je peux seulement obtenir le code de statut, les en-têtes, le mime-type, etc. mais aucun corps.

Comment puis-je obtenir le message corporel de NSURLResponse?

Répondre

26

Pourquoi annulez-vous la connexion? Après tout, 404 peut aussi avoir un corps de contenu. Ne l'annulez pas et laissez le programme appeler la méthode suivante de délégué 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. Read corresponding part in the docs:

La réponse d'un serveur à une requête peut être vue comme deux parties: les métadonnées décrivant le contenu et les données de contenu d'URL. Les métadonnées communes à la plupart des protocoles sont encapsulées par la classe NSURLResponse et comprennent le type MIME, la longueur de contenu attendue, le codage du texte (le cas échéant) et 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é lorsqu'il est reçu de la source d'origine, tandis qu'un objet NSURLDownload écrit les données de la requête directement sur le disque. Les deux classes fournissent une prise en charge étendue des délégués pour répondre aux redirections, aux problèmes d'authentification et aux conditions d'erreur.

En ce qui concerne la mise en œuvre d'un délégué exemple:

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

} 
+2

Si vous faites un appel synchrone, cependant, vous n'utilisez des méthodes de délégués. Vous obtenez le résultat immédiatement: [NSURLConnection sendSynchronousRequest: request returnsResponse: & erreur de réponse: & err] – Oscar

Questions connexes