5628


AFNetWorking を使用した非同期通信を実装しています。  
下記のようなコードで非同期通信にデータを取得することはできました。  
しかし通信の終了タイミングで特定の処理を実行する方法がわかりません。

[code]

    @property NSInteger *pageIndex;
    @property NSArray *responseData;
    
    - (void)viewDidLoad{
        self.pageIndex = 1;
        while (true) {
            [self getJSON];
            NSLog(@"%@", self.responseData);
        }
    }
    
    - (void) getJSON{
        AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager];
        manager.responseSerializer = [AFJSONResponseSerializer serializer];
        [manager GET:@"http://togech.jp/api/getPosts"
          parameters:@{@"page": [NSString stringWithFormat:@"%d", self.pageIndex]}
             success:^(AFHTTPRequestOperation *operation, id responseObject) {
                 self.responseData = responseObject;
             } failure:nil];
        self.pageIndex++; // このコードを非同期通信の最後に実行したい
    }
    
[/code]

非同期処理の終了タイミングで特定の処理を呼び出すにはどのようにすればよいのでしょうか？


CC BY-SA 3.0
2015-01-30T07:54:28.913
5609
2015-02-02T05:38:03.820
2015-02-02T05:38:03.820
5505
5505
question
ios objective-c
非同期通信の終了タイミングで処理を呼びだしたい


`success:`コールバックの`self.responseData = responseObject;`の後に処理を入れれば良いのでは。

ただし画面更新を伴う場合はメインスレッドに戻すために、

[code]

    [manager GET:@"http://togech.jp/api/getPosts"
      parameters:@{@"page": [NSString stringWithFormat:@"%d", self.pageIndex]}
         success:^(AFHTTPRequestOperation *operation, id responseObject) {
             dispatch_async(dispatch_get_main_queue(), ^{
                 self.responseData = responseObject;
                 self.pageIndex++;
             });
         } failure:nil];
    
[/code]

のように`dispatch_async`する必要があります。


CC BY-SA 3.0
2015-01-30T12:23:12.163
5628
2015-01-30T12:23:12.163
5750
5609
answer