NSURLConnection* connection = [NSURLConnectionこれが、非同期通信を行っている部分です。引数には、NSURLRequestと、デリゲートクラスのインスタンスが渡されています(デリゲートクラスは、ごく当たり前にallocしてinitしてautoreleaseしてインスタンスを作っています)。通信そのものは、これでおしまいです。後はNSURLConnectionが適当にやってくれるんですから。
connectionWithRequest:request delegate:delegate];
- (void)connection:(NSURLConnection *)connectionまずは、レスポンスが返ってきたときの処理です。ここで、NSMutableDataインスタンスを作成し初期化しています。データ受信のための準備を行っているわけですね。
didReceiveResponse:(NSURLResponse *)response
- (void)connection:(NSURLConnection *)connectionこれは、データを受信したときの処理でした。ここでは、NSMutableDataの「appendData:」というメソッドを呼び出して、受け取ったデータを追加しています。このメソッドでは、接続しているNSURLConnectionと、受け取ったデータが保管されているNSDataがそれぞれ引数として渡されます。このNSDataを、インスタンス変数のNSMutableDataに追加していくわけです。
didReceiveData:(NSData *)data
- (void)connectionDidFinishLoading:通信完了時の処理です。ここでは、インスタンス変数のNSMutableDataをNSLogで出力しています。ここでは単にそのまま書き出しているだけですが、必要に応じてNSDataからNSStringに戻したり、あるいは受け取ったデータをファイルに保存したりといった処理も、ここで行えばよいでしょう。
(NSURLConnection *)connection
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
#import <Foundation/Foundation.h>
// デリゲートクラスの宣言
@interface SampleConnectDelegate : NSObject {
NSMutableData* result;
}
@end
// デリゲートクラスの実装
@implementation SampleConnectDelegate
- (void)connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *)response {
result = [[NSMutableData alloc] init];
}
- (void)connection:(NSURLConnection *)connection
didReceiveData:(NSData *)data {
[result appendData:data];
}
- (void)connectionDidFinishLoading:
(NSURLConnection *)connection {
NSLog(@"%@",result);
}
@end
// メイン関数
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSString* address = @"http://www.apple.com/";
NSURL* url = [NSURL URLWithString:address];
NSURLRequest* request = [NSURLRequest
requestWithURL:url];
SampleConnectDelegate* delegate =
[[SampleConnectDelegate alloc] init];
NSURLConnection* connection =
[NSURLConnection
connectionWithRequest:request
delegate:delegate];
if (!connection) {
NSLog(@"Error...");
}
// 終了しないようにしておく
[[NSRunLoop currentRunLoop] run];
}
return 0;
}
| << 前へ |