web-dev-qa-db-ja.com

NSUrlConnectionDelegate-HTTPステータスコードの取得

iOSでは、Webサーバーからの応答のhttpステータスコード(404、500、200など)をどのように受信できますか。 NSUrlConnectionDelegateにあると仮定しています。

Objective-CまたはMonotouch .NET answer ok。

34

はい、デリゲートメソッド-didRecieveResponseでステータスコードを取得できます。

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
   NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
   int code = [httpResponse statusCode];
}
87
Vladimir
NSHTTPURLResponse* urlResponse = nil;
NSError *error = nil;
responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];

ASynchronousリクエストには、NSHTTPURLResponseを取得する方法も必要です。

次のようなステータスコードを取得します。

int statusCode = [urlResponse statusCode];
int errorCode = error.code;

使用頻度の高いエラーコード(404など)の場合、エラーになりますが、別のコード(401は-1012)になります。

11
Manuel

これらのC#ユーザー向けにMonoTouch for .NETでそれを行う方法を次に示します。これはNSUrlConnectionDelegateにあります。

public override void ReceivedResponse (NSUrlConnection connection, NSUrlResponse response)
{
  if (response is NSHttpUrlResponse)
  {
    var r = response as NSHttpUrlResponse;
    Console.WriteLine (r.StatusCode);
   }
}
3

この他のstackoverflowの質問 を見ると、- (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse *)responseデリゲートメソッドでhttpステータスコードを処理できるようです:

- (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse*)response 
{
    if ([response isKindOfClass: [NSHTTPURLResponse class]])
        statusCode = [(NSHTTPURLResponse*) response statusCode];
}
1
Carter