web-dev-qa-db-ja.com

NSURLResponse本文を取得するにはどうすればよいですか?

NSURLConnectionを使用してサーバーに接続するアプリケーションを作成しています。

デリゲートメソッドdidreceiveresponseで、ステータスコードが404の場合、接続をキャンセルし、サーバーで生成されたカスタムエラーを含むメッセージを表示したいと思います。

問題は、応答オブジェクトから、ステータスコード、ヘッダー、MIMEタイプなどしか取得できず、本文は取得できないことです。

NSURLResponseから本文メッセージを取得するにはどうすればよいですか?

31
telemaco

接続をキャンセルするのはなぜですか?結局、404もコンテンツ本文を持つことができます。キャンセルしないで、次のデリゲートNSURLConnectionメソッドをプログラムに呼び出させてください。データ[コンテンツ本体]が送信されると、- (void)connection:(NSURLConnection *) didReceiveData:(NSData *)が呼び出され、そこでデータを取得する必要があります。 ドキュメントの対応する部分を読む

サーバーからリクエストへの応答は、コンテンツを説明するメタデータとURLコンテンツデータの2つの部分として表示できます。 ほとんどのプロトコルに共通するメタデータはNSURLResponseクラスによってカプセル化され、MIMEタイプ、予想されるコンテンツの長さ、テキストエンコーディング(該当する場合)、および応答を提供したURLで構成されます。

NSURLConnectionクラスとNSURLDownloadクラスは、NSURLRequestオブジェクトで指定された接続を作成し、コンテンツをダウンロードするためのインターフェイスを提供します。要求データを直接ディスクに書き込みます。両方のクラスは、リダイレクト、認証チャレンジ、およびエラー状態に対応するための広範なデリゲートサポートを提供します。

デリゲートの実装例については:

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

}
27
Özgür