2013-10-27 29 views
0

我想用NSURLconnection一个接一个地下载多个文件,而且可以做的最大下载量是5.这个过程就像初次下载,当第一次下载完成后才开始第二次下载当第二个是完整的启动第三one.Likewise的第四下载和第五download.i我能够下载一个文件.The代码相同的是:使用nsurlconnection一个接一个下载

- (IBAction)download1:(id)sender { 
    _fileName = @"dog-wallpaper-dogs.jpg"; 
    _currentURL = [NSString stringWithFormat:@"http://noruffdaysdotcom1.files.wordpress.com/2012/04/%@",_fileName]; 
    NSLog(@"currenturl%@",_currentURL); 

    NSLog(@"the filename is %@",_fileName); 

    NSURL *url =[NSURL URLWithString:_currentURL]; 
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60]; 

    _receivedData = [[NSMutableData alloc]initWithLength:0]; 
    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:theRequest delegate:self startImmediately:YES]; 


} 

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 
    NSLog(@"THE STATUS CODE IS %d",[httpResponse statusCode]); 
    statuscode = [httpResponse statusCode]; 
    NSLog(@"into didReceiveResponse"); 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    [_receivedData setLength:0]; 
    expectedBytes = [response expectedContentLength]; 
    NSLog(@"EXPECTED BYTES:%ld",expectedBytes); 
} 
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    // NSLog(@"into did receivedata"); 
    [_receivedData appendData:data]; 
    // float progressive = (float)[_receivedData length]/(float)expectedBytes; 


} 

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    flag= 0; 
    NSLog(@"into didfailwitherror"); 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
    NSLog(@"connection failed"); 
} 

-(NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse 
{ 
    return nil; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 

{ flag = 0; 
    NSLog(@"into didfinishloading"); 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSLog(@"DOCUMENT DIRECTORY :%@",documentsDirectory); 
    // [NSFileManager isWritbleAtPath:documentsDirectory]; 
    // [NSFileManager isWritableAtPath:documentsDirectory]; 
    _imagePath = [documentsDirectory stringByAppendingPathComponent:_fileName]; 
    NSLog(@"iamge path:%@",_imagePath); 
    NSLog(@"succeeded"); 
    [UIApplication sharedApplication].networkActivityIndicatorVisible= NO; 
    NSLog(@"Succeeded! Received %d bytes of data",[_receivedData length]); 

    // flag= [_receivedData writeToFile:imagePath atomically:NO]; 
    if([_receivedData writeToFile:_imagePath atomically:YES]) 
    { 
     flag= 1; 
     NSLog(@"write successfull"); 

    } 
    else{ 
     flag =0; 
     NSLog(@"write failed"); 
    } 
    UIImage *img =[UIImage imageWithContentsOfFile:_imagePath]; 
    self.imageview.image = img; 
    isloaded = YES; 
} 

请帮助我,我怎么就下一步下载早些时候完成。

回答

0

我建议你以这种方式使用NSURLConnection的:

创建操作队列maxConcurrentOperationCount = 1

NSOperationQueue *requestsQueue = [[NSOperationQueue alloc] init]; 
[_requestsQueue setMaxConcurrentOperationCount:1]; 

,并开始以这种方式所有连接:

NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:@"http://yourUrlRequest.com"]; 
. 
. // configure your request 
. 

[NSURLConnection sendAsynchronousRequest:urlRequest 
            queue:requestsQueue 
         completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 

// handle your request here 
} 

时请求结束下一个开始,因此添加所有异步请求,它们将逐个启动(队列并发= 1)

万一发生故障并且您想取消所有请求,只是暂停队列并删除所有请求

[requestsQueue setSuspended:YES]; 
[requestsQueue cancelAllOperations];