0

複数の 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];
    }
}

よろしくお願いします。

4

1 に答える 1

0

これを行う1つの方法は次のとおりです。(簡単なデモであり、まったく実行されたかどうかはわかりません)

// 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];
}
于 2016-04-29T22:24:45.780 に答える