NSURLSession で”GET”しよう!

20160203_001
来るとは思っていましたが、NSURLConnectionは、Xcode7(iOS9)から非推奨となりました。
こうなると、いつかは消えてしまう(使えなくなる)運命に・・・。
切り替える時間がないとか、新しいのは嫌い(笑)とかいわずに

非推奨のうちに、NSURLSessionに切り替えてしまいましょう!
今回は、”GET”です。

検証環境

Xcode 7beta5
iOS 8.4.1
Objective-C

通信前の準備

通信するための情報を設定していきます。

requestの作成

アドレス、Headerの部分の作成。
この部分は、NSURLConnectionをそのまま流用できます。

time outの設定

NSURLSessionからTimeOutの設定が、RequestとResoruceの両方の設定ができるようになります。

NSURLsessionの設定

NSURLsessionの設定内容
1.sessionWithConfiguration(time out)
2.delegate
3.delegateQueue

NSURLDataTaskの設定

最後は今まで設定したのをまとめるだけ

通信開始

開始は”resume”

delegate methodの設定

読み込み途中、読み込み結果を取得するdelegate methodの設定をしていきます。

delagate methodは3つ

– (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler;

– (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data;

– (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error:

どのメッソッドも長すぎです(笑)

– (void)URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler;

このメソッドは、requestを投げた結果が返ってきます。
返ってきた情報から、通信を続けるのか、終了するのかをcompletionHandlerを使用して返します。

– (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data;

サーバーからデータを受信すると呼ばれます。

– (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error:

通信が完了したり、通信失敗すると呼ばれます。
errorで通信完了か、通信失敗かを判断

まとめ

駆け足で説明してきてしまいましたが
NSURLSessionへの変更が簡単にできそう!と思っていただけましたでしょう?
time outエラーはきっちりと動作してくれますので別にtimerを用意したりする必要がありません。
ありがたいです。

ソースコード

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

フォローする

スポンサーリンク