2013-10-11 49 views
0
- (void)downloadUrls:(NSArray *)urls completionBlock:(void(^)(NSArray *results))completionBlock { 
    NSMutableArray *results = [NSMutableArray array]; 
    BOOL finishAll = NO; 
    for(NSString *url in urls) { 
     [Downloader startFetch:url completion:^(id response){ 
      [results addObject:response]; 
     }]; 
    } 
    if(finishAll){ 
     completionBlock(results); 
    } 
} 

我需要下载多个网址,用这种方法,如果所有的URL下载了,调用completionBlock,然而,startFetch:是异步方法,所以是有任何的方法来确定所有任务,以调用都做completionBlock?如何确定调用异步方法时完成的所有任务?

回答

2

不在里面downloadURLs:completionBlock:,不,你可以检查你是否在startFetch:completion:的完成块内的最后一项。

[Downloader startFetch:url completion:^(id response){ 
     [results addObject:response]; 
     if([results count] == [urls count]){ 
      completionBlock(results); 
     } 
}]; 

NSMutableArray *results = [NSMutableArray array]; 
id lastURL = [results lastObject]; 
for(NSString *url in urls) { 
    [Downloader startFetch:url completion:^(id response){ 
     [results addObject:response]; 
     if(url == lastURL){ 
      completionBlock(results); 
     } 
    }]; 
} 
相关问题