32

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

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

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

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

4

1 に答える 1

27

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

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

NSURLConnectionクラスとNSURLDownloadクラスは、NSURLRequestオブジェクトで指定された接続を確立し、コンテンツをダウンロードするためのインターフェイスを提供します。NSURLConnectionオブジェクトは、元のソースから受信したデータをデリゲートに提供しますが、NSURLDownloadオブジェクトは、要求データをディスクに直接書き込みます。どちらのクラスも、リダイレクト、認証の課題、およびエラー状態に対応するための広範なデリゲートサポートを提供します。

デリゲートの実装例として:

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

}
于 2011-01-06T20:57:48.967 に答える