iOS / AFNetworking 3.0:按顺序完成多个请求

时间:2017-04-26 18:44:54

标签: ios objective-c for-loop afnetworking

我已经多次发送API GET请求的以下代码(示例代码)。

 - (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循环。除非有更好的方法来完成这项任务,否则有人能指出我正确的方向。我已经尝试过调度组,但它没有按顺序完成每个请求。

1 个答案:

答案 0 :(得分: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
                 // ...
            }];
    }
}