2011-03-12 6 views
1

다운로드 도구를 작성했습니다. 그것은 NSURLDownload와 함께 잘 작동합니다. 그러나 다운로드를 다시 시작하는 데에는 몇 가지 문제가 있습니다. resumeData는 항상 nil입니다! jDownloader를 사용하여 동일한 파일을 다운로드 할 때 다운로드를 중지하고 다시 시작하면 jDownloader가 다운로드를 다시 시작합니다! 그래서이 파일과 서버로 가능합니다!NSURL 다운로드 resumeData nil

코드 :

- (void)startDownload { 
    status = @"loading"; 
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 

    urlDownload = [[NSURLDownload alloc] initWithRequest:theRequest delegate:self]; 
    [urlDownload setDeletesFileUponFailure:NO]; 

    if (!urlDownload) { 
     [self error:@"Failed starting download request!"]; 
    } 
} 

시험 : "stopWithResumeOption"로로드하는 동안 나는 다운로드를 중지하면

- (IBAction)stopWithResumeOption:(id)sender { 
    [urlDownload cancel]; 
    NSData *tempData = [urlDownload resumeData]; 

    NSLog(@"%@",tempData); 
} 

난 항상 nil을 얻을! 내가 뭔가를 놓친 건가요?!

편집 :

resumeData가 반환하는 정보는 무엇입니까? 이미 다운로드 한 데이터의 길이 만 있다면 어쩌면 혼자서이 resumeData를 만들 수 있을까요?! 누구든지 전에 이것을 시도 했습니까?

편집 2 :

여기

것은 하나 개의 파일의 응답 헤더 나는 다시 시작하는 것을 시도하고있다 : 심지어의 ETag가 서버에 의해 제공됩니다

{ 
    "Accept-Ranges" = bytes; 
    "Cache-Control" = "max-age=0"; 
    Connection = "keep-alive"; 
    "Content-Length" = 43346723; 
    "Content-Type" = "application/pdf"; 
    Date = "Sun, 13 Mar 2011 13:08:44 GMT"; 
    Etag = 1185n; 
    Pragma = public; 
    Server = dbws; 
    "X-Robots-Tag" = "noindex,nofollow"; 
} 

을!

그것을 이런 식으로 할 수있는 기회가된다

- (IBAction) resume:(id)sender { 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
    NSString *authHeader = [NSString stringWithFormat:@"bytes=%llu-%llu",bytesReceived, totalBytesToLoad]; 
    [request addValue:authHeader forHTTPHeaderField:@"Range"]; 

    urlDownload = [[NSURLDownload alloc] initWithRequest:request delegate:self]; 
} 

는하지만이 시도에 계속하는 방법을 잘 모르겠어요 ...

+0

URL은 무엇입니까? – falconcreek

답변

1

documentation는 말한다 :

취소

수신자의 다운로드를 취소하고 다운 드레드를 삭제합니다. d 파일.

대신 네트워크에서 연결을 끊어 장애를 시뮬레이트하는 것을 고려하십시오. 델리게이트 메서드를 구현하는 것을 잊지 마십시오.

편집 :

documentation는 말한다 :

resumeData 다운로드가 재개 될 수없는 경우

반환 값은 nil을. 다운로드의 프로토콜뿐만 아니라 서버 지원

를 다시 시작하는 경우

토론

다시 시작 데이터는 서버가 재개 지원하는 것이 확실한 반환됩니다?

urlDownload

startDownload 방법 assigned입니다

urlDownloadstopWithResumeOption: 방법 nil하지 있는지 확인합니다 ..

시도 :

편집이 (가 선언되는 방법?) :

urlDownload = [[[NSURLDownload alloc] initWithRequest:theRequest delegate:self] retain]; 

이고 적절한 경우 [urlDownload release]을 기억하십시오.

+0

안녕하세요, 답변은 thx입니다. – user656549

+0

하지만 문제가 해결되지 않았습니다! resumeData는 연결 실패로 시도해도 nil입니다! resumeData를 얻으려면 다운로드를 취소해야한다고 읽었습니다. ?? – user656549

+0

예, 말했듯이 jDownloader를 사용하여 이것을 시도했습니다! 다른 서버 (예 : netload 및 dropbox)를 사용합니다. – user656549

0

나는 이것이 오래되었음을 알고 있지만 잘하면이 시간 누군가를 구할 것입니다.

현재로서는 설명서에 언급되어 있지 않지만이 다운로드가 취소되거나 실패하지 않는 한 resumeData 속성은 항상 nil을 반환합니다.

다운로드 도중 앱이 다운되면 다운로드를 다시 시작하기가 어렵 기 때문에 불행합니다.