连接使用NSURLConnection时丢失错误

问题描述:

我在使用NSURLConnection时遇到连接丢失问题。我正在使用NSURLConnection进行异步下载。我正在下载大小约80MB的大文件。每次正确处理文件时,我都会将收到的数据写入文件。在某段时间后,我在名为didFailWithError的NSURLConnection委托的方法中出现连接“连接丢失”的错误。如果我在Mac上的模拟器中执行,那么它将需要很长时间,但是文件可以成功下载,而不会出现“连接丢失”错误。任何建议如何避免这个错误?或者这个错误背后的原因是什么?连接使用NSURLConnection时丢失错误

让我知道是否需要任何细节。请注意,我阅读过类似的文章,但它并没有帮助我。

+0

就可以显示相关的代码? – Raptor 2013-03-21 06:08:51

+0

这里是一个建议:http://*.com/questions/6926518/how-to-download-large-files-from-web-service-iphone – rptwsthi 2013-03-21 06:43:37

找到下面的代码片段,让我知道,如果需要了解更多信息:

-(void) startDownloadFromURL:(NSString*)URLString 
{ 
    if(URLString == nil) 
    { 
     [delegate DownloadFailed:-1]; 
     return; 
    } 
    //self.pstrBaseFilePath = filePath; 
    URLString = [URLString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 

    NSMutableURLRequest* pRequest = [[NSMutableURLRequest alloc] init]; 
    [pRequest setURL:[NSURL URLWithString:URLString]]; 

    if(gpUserDataManager.pstrSessionID == nil) 
     return; 

    [pRequest addValue:[@"ASessionID=" stringByAppendingString:gpUserDataManager.pstrSessionID] forHTTPHeaderField:@"Cookie"]; 

    [pRequest setHTTPMethod:@"GET"]; 
    [pRequest setTimeoutInterval:180]; 


    self.urlConnection = [[NSURLConnection alloc] initWithRequest:pRequest delegate:self]; 

    [urlConnection start]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 

    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 

    if([httpResponse statusCode] == 200) 
    { 

    } 
    else 
    { 
     //Start.NOODLE-13304 
     /* NSInteger iResponseCode = [httpResponse statusCode]; 
     NSString* pstrStr = [NSString stringWithFormat:@"%d", iResponseCode]; 

     //pTheConnection = nil; 

     [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Response Error", @"") 
     message:pstrStr 
     delegate:nil 
     cancelButtonTitle:NSLocalizedString(@"OK", @"") 
     otherButtonTitles:nil] show]; 
     */ 
     [AUserDataManager ProcessResponseCode:httpResponse.statusCode]; 
     [self.urlConnection cancel]; 
     [delegate DownloadFailed:httpResponse.statusCode]; 
     //End.NOODLE-13304 
    } 

    //[self.pRecvdata setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    if(self.recvdData == nil) 
    { 
     self.recvdData = [[NSMutableData alloc] init]; 
    } 

    [self.recvdData appendData:data]; 
} 


- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 

    // bIsResponseOK = FALSE; 
    // 
    // [NSThread detachNewThreadSelector: @selector(SpinEnd) toTarget:self withObject:nil]; 
    // 
    // pTheConnection = nil; 

    [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Connection Error", @"") 
           message:[error localizedDescription] 
           delegate:nil 
         cancelButtonTitle:NSLocalizedString(@"OK", @"") 
         otherButtonTitles:nil] show]; 
    [self.urlConnection cancel]; 
    [delegate DownloadFailed:-1]; 

} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [connection cancel]; 
    [delegate DownloadCompleted:self.recvdData]; 
} 

DownloadRequest *request = [[DownloadRequest alloc] init]; 
request.delegate = self; 
[request startDownloadFromURL:strURL];