NSURLとNSURLConnection (4/6)
作成:2011-02-23 09:40
更新:2011-11-13 21:59
更新:2011-11-13 21:59
■NSURLConnectionによる同期通信
まずは、比較的簡単な同期通信から行いましょう。これは、実際にサンプルコードを見てもらい、それをもとに説明をしていったほうが分かりやすいでしょう。
下のリスト欄に掲載したのが、同期通信でwww.apple.comのデータを取得し表示するサンプルです。では、先に説明した手順を思い出しながら、処理の流れを見ていきましょう。
1.まず、接続先のNSURLを用意します。これはNSStringでアドレスを用意してNSURLを作成すればいいだけですね。
2.NSURLRequestインスタンスを用意します。これはrequestWithURL:というコンビニエンスコンストラクタを利用します。以下のようにNSURLを引数に渡してインスタンスを作成します。これで、指定のアドレスに接続するためのリクエストが用意されます。
4.NSURLConnectionのメソッドを呼び出して同期接続を開始します。これは「sendSynchronousRequest: returningResponse: error:」という長ったらしいメソッドを用います。NSURLRequest、NSURLResponse、NSErrorそれぞれを引数に用意します。NSURLResponseとNSErrorは、それぞれポインタのポインタで渡します。
5.受け取ったNSDataは、まだバイナリデータなので、これをテキストに戻さないといけません。NSStringには、NSDataのバイナリデータをもとに初期化をするためのメソッドが用意されているので、それを利用します。
下のリスト欄に掲載したのが、同期通信でwww.apple.comのデータを取得し表示するサンプルです。では、先に説明した手順を思い出しながら、処理の流れを見ていきましょう。
1.まず、接続先のNSURLを用意します。これはNSStringでアドレスを用意してNSURLを作成すればいいだけですね。
2.NSURLRequestインスタンスを用意します。これはrequestWithURL:というコンビニエンスコンストラクタを利用します。以下のようにNSURLを引数に渡してインスタンスを作成します。これで、指定のアドレスに接続するためのリクエストが用意されます。
NSURLRequest* 変数 = [NSURLRequest requestWithURL:《NSURL*》];3.NSURLResponseとNSErrorの変数を用意しておきます。これは、必要に応じてオブジェクトが書き込まれるものなので、どちらもnilの状態のままでOKです。
4.NSURLConnectionのメソッドを呼び出して同期接続を開始します。これは「sendSynchronousRequest: returningResponse: error:」という長ったらしいメソッドを用います。NSURLRequest、NSURLResponse、NSErrorそれぞれを引数に用意します。NSURLResponseとNSErrorは、それぞれポインタのポインタで渡します。
NSData* 変数 = [NSURLConnection sendSynchronousRequest:《NSURLRequest*》同期通信なので、このメソッドを呼び出した時点で通信が開始されます。そしてすべての通信が終了すると、返値として「NSData」が返されます。このNSDataというクラスは、バイナリデータを扱うためのクラスなのです。つまり、受け取ったデータが、NSDataという形で返ってくるわけですね。
returningResponse:《NSURLResponse**》 error:《NSError**》];
5.受け取ったNSDataは、まだバイナリデータなので、これをテキストに戻さないといけません。NSStringには、NSDataのバイナリデータをもとに初期化をするためのメソッドが用意されているので、それを利用します。
NSString* 変数 = [[NSString alloc] initWithData:《NSData》 encoding:エンコード名];これで、通信して得られた結果がNSStringとして受け取れました! ここではHTMLページにアクセスしたので最終的にテキストにしていますが、もちろん、グラフィックなどのデータも受け取ることができます。この場合は、NSDataをファイルに出力するなどすれば、グラフィックファイルをダウンロードできます。このへんは、NSDataについてもうちょっと勉強する必要がありますが、とりあえず「通信出来ればどんなデータでもこのやり方で受け取れる」ということはわかったでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool { NSString* address = @"http://www.apple.com/"; NSURL* url = [NSURL URLWithString:address]; NSURLRequest* request = [NSURLRequest requestWithURL:url]; NSURLResponse* response = nil; NSError* error = nil; NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSString* result = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; NSLog(@"%@",result); } return 0; }
※関連コンテンツ
「初心者のためのObjective-Cプログラミング入門」に戻る