2017-04-26 19 views
1

API GETリクエストを複数回送信する以下のコード(サンプルコード)があります。iOS/AFNetworking 3.0:複数のリクエストを順番に完了

- (void)listOfPeople:(NSArray *)array { 
      for (int i = 0; i < array.count; i++) { 
       Person *person = [array objectAtIndex:i]; 

       [personClient getPersonData:person.fullName onSuccess:^(id result) { 
        // change data here 

       } onFailure:^(NSError *error) { 

       }]; 
      } 
     } 

APIリクエストが毎回異なる順序で終了するため、コードはうまく機能しません。私は順番に各apiの要求を完了する必要があります。 forループを続行する前に、完了ブロックか失敗ブロックのどちらかが終了するまで待つ必要があると思います。このタスクを達成するためのよりよい方法がない限り、誰かが正しい方向に向かうことができますか?ディスパッチグループを試しましたが、各リクエストを順番に完了しませんでした。

+0

なぜあなたは彼らが到着したどのような順序を気にしますか? UIの各部分(または何でも)を、到着した順番で各応答に入力し、 'i'の値を使って更新するUI項目を決定します。 – dgatwood

答えて

0

forループを取り除き、補完関数を呼び出して補完ハンドラから次のPersonを取得します。こうすることで、各コールが完了すると、次のコールを呼び出すことができます。このような

何か:

- (void)getPersonFromArray:(NSArray *)array atIdx:(NSInteger)idx { 
    if (idx < array.count) 
    { 
     Person *person = [array objectAtIndex:idx]; 
     [personClient getPersonData:person.fullName onSuccess:^(id result)  
      { 
       // Do something useful with Person here... 
       // ... 
       [self getPersonFromArray:array atIdx(idx + 1)]; 
      } onFailure:^(NSError *error) { 
       // Handle errors here 
       // ... 
      }]; 
    } 
} 
+0

ありがとうございます。感謝します。 – Weakman10122

関連する問題