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