0

NSURLConnection の使用中に接続が失われる問題に直面しています。非同期ダウンロードに NSURLConnection を使用しています。サイズが 80MB 前後の大きなファイルをダウンロードしています。適切なファイル処理で毎回受信データをファイルに書き込んでいます。しばらくすると、didFailWithError という名前の NSURLConnection デリゲートのメソッドで接続「接続が失われました」というエラーが発生します。Mac のシミュレーターで実行すると、時間がかかりますが、接続が失われたというエラーが発生することなく、ファイルが正常にダウンロードされます。このエラーを回避する方法はありますか? または、このエラーの背後にある理由は何ですか?

詳細が必要な場合はお知らせください。同様の種類の投稿を読んだことがありますが、役に立たなかったことに注意してください。

4

1 に答える 1

-1

以下のコード スニペットを見つけて、さらに情報が必要な場合はお知らせください。

-(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];
于 2013-03-21T12:36:24.110 に答える