2017-04-26 72 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