2013年11月22日

【iPhone】NSURLSessionを使う



iOS7から、NSURLSessionというクラスが追加されました。

NSURLConnectionもHTTP通信をするクラスなのですが、

NSURLSessionは大変使いやすいので、iOS7ではこちらを使いましょう。


NSURLConnectionとNSURLSessionを使って、HTTP通信をするサンプルです。

typedef void (^NSURLRequestCompletionHandler)(id, id, id);

// Completion Handler Block
NSURLRequestCompletionHandler handler = ^(NSURLResponse *response, NSData *data, NSError *error) {                                                                                                                                                                                              
    if ([data length] > 0 && error == nil) {
        // 成功
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"RESULT: %@", result);
    }   
    else if ([data length] == 0 && error == nil) {
        // DLコンテンツ無し
        NSLog(@"Nothing to load");
    }   
    else if (error != nil) {
        // 失敗
        NSLog(@"Error = %@", error);
        // リトライするのであれば、delegateをここで呼ぶ
    }   
};

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
    [NSURLConnection sendAsynchronousRequest:myNSURLRequest queue:[NSOperationQueue mainQueue] completionHandler:handler];
} else {
    // Use NSURLSession for background upload
    [[[NSURLSession sharedSession] dataTaskWithRequest:myNSURLRequest completionHandler:handler] resume];
}

通信終了後のメソッドはまとめて、blockにして、
iOSのバージョンコードでNSURLConnectionとNSURLSessionを分けてます。

とりあえずこれでいいのかな?