5

Apple の NSURLSession#dataTaskWithURL メソッドで単純な get リクエストを実行しています

[[mySession dataTaskWithURL:myUrl completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
   // fancy code goes here...
 }] resume];

ステータス コードが成功した場合に何かを実行する条件が必要な場合は、NSURLResponse を NSHTTPURLResponse としてキャストする必要があるようです.....

    NSUInteger statusCode = ((NSHTTPURLResponse *)response).statusCode;
    if (!error && statusCode == 200) {
      // even fancier code goes here
    } else {
      // omg!!!!!!!!!
    }

...

しかし---------私の質問は: なぜ!?!?!?!?!?!?!?

いったいなぜ Apple は、自身のステータスを知らない型にキャストされた応答オブジェクトを渡すのでしょうか?! 私がこのコードを書かなければならなかったという事実は、私が何か非常に間違ったことをしていると思います。それが 200、404、または 500 であったかどうかを知るためのより良い方法が必要です...

私は、completionHandler のブロック引数の型を NSHTTPURLResponse に変更できることを望んでいましたが、それはうまくいかないようです!

4

2 に答える 2

0

NSHTTPURLResponseレスポンスから のインスタンスを型キャストし、そのstatusCodeメソッドを使用します。

[NSURLConnection sendAsynchronousRequest:myRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
    NSLog(@"response status code: %ld", (long)[httpResponse statusCode]);
    // do stuff
}];
于 2015-09-12T11:31:28.303 に答える