iOS:发出多个NSURLSession请求

时间:2016-04-29 21:58:57

标签: ios xcode nsurlsession nsurlrequest nsurlsessiondatatask

我需要发出多个http请求,但我需要等待请求的响应继续下一个请求,但我无法弄清楚如何做到这一点。有没有身体知道如何在不使用dispatch_semaphore

的情况下执行此操作

这是我的代码:

-(void)multipleReques:(NSArray*)arrayUrl
{
    __block NSInteger *countFailures = 0;

    for (NSString *urlStr in arrayUrl)
    {

        NSURL *URL = [NSURL URLWithString:urlStr];
        NSURLRequest *request = [NSURLRequest requestWithURL:URL];
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                                completionHandler:
                                      ^(NSData *data, NSURLResponse *response, NSError *error) {

                                          if (error)
                                          {
                                              countFailures++;
                                          }
                                      }];
        [task resume];
    }
}

我真的很感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

这是一种方法:(只是一个快速演示,不确定它是否完全执行)

// Global variables somewhere...
NSUInteger progress;
NSUInteger failures;

- (void)myFunction
{
  // ...
  progress = 0;
  failures = 0;
  [self makeRequestWithURLs:@[...]]; // an array of NSURLs.
  // ...
}

- (void)makeRequestWithURLs:(NSURL *)arrayOfURLs
{
  if ([arrayOfURLs count] <= progress) {
    return;
  }

  NSURLRequest *request = [NSURLRequest requestWithURL:arrayOfURLs[progress]];
  NSURLSessionDataTask *task = [[NSURLSession sharedSession] 
  dataTaskWithRequest:request completionHandler:^(NSData *data, 
                                                  NSURLResponse *response, 
                                                  NSError *error) 
  {
    if (error) {
      failures++;
    } else {
      progress++;
      [self makeRequestWithURLs:arrayOfURLs];
    }
  }];
  [task resume];
}