恥知らずのウェブエンジニア -web engineer, shameless

これは一歩を踏み出すことができない者たちのブログ

ios NSURLConnectionで非同期で通信する

最近ひどくアレな感じなので、iosアプリを作ろうと思います。

非同期通信を実装した時のメモ。
いろいろライブラリなどもあるようなのですが、
どれがいいのかわからなかったのでとりあえず標準のNSURLConnectionクラスをつかってみました。

公式ドキュメントは下記。
https://developer.apple.com/jp/devcenter/ios/library/documentation/URLLoadingSystem.pdf

流れ的には、
・リクエスト生成
・リクエスト実行
・各種デリゲートメソッド用意して、各々処理

    //リクエスト生成
    NSURL *url = [NSURL URLWithString:@"https://hogr.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url
                                             cachePolicy:NSURLRequestUseProtocolCachePolicy
                                         timeoutInterval:60.0];
    
    receivedData = [NSMutableData dataWithCapacity: 0];
    //リクエスト実行
    NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
    if (!connection) {
        NSLog(@"ERORR");
        receivedData = nil;
    }


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    // 受信にに備え初期化
    [receivedData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSLog(@"ADDING_DATA");
    // データを追加
    [receivedData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"ERROR");
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);
    NSLog(@"FIN");
    
    NSLog(@"data: \n%@", [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]);
}


感謝致します。
f:id:ogataka50:20140508011928j:plain