2016-10-26 3 views
0

무언가를 다운로드하려면 [manager downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response){}]을 사용합니다.NSProgress가 완료되면 파일을 읽을 수 없습니까?

KVO를 사용하여 progress.fractionCompleted == 1 일 때 다운로드 한 파일을 읽었습니다. 그리고 나는 파일을 읽을 때 이 아닌을 얻게됩니다.

그래서 을 알고 싶습니다. 파일을 읽을 수 있습니다. 그리고 진행 완료 의미 디스크에 파일을 완전히 작성 또는 모든 데이터을받습니다.

그래서 편집

- (void)URLSession:(__unused NSURLSession *)session 
     downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask 
     didWriteData:(__unused int64_t)bytesWritten 
totalBytesWritten:(int64_t)totalBytesWritten 
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite 
{ 
    self.progress.totalUnitCount = totalBytesExpectedToWrite; 
    self.progress.completedUnitCount = totalBytesWritten; 
} 

, 그것은 진행 상황을 설정 한 후 첫 번째 파일을 작성해야 하는가? 하지만 왜 내가 nil 얻을 ???

답변

1

사용자에게 일종의 진행 상황을 표시하려면 위임 메서드에서 진행 상황을 추적하는 것이 좋습니다. 그러나 그것이 이 아니라 파일을 가져 오는 방법을 아는 방법입니다.

파일을 가져올 수있는 방법은 대리자 메서드 URLSession:downloadTask:didFinishDownloadingToURL:이 실행되는 경우입니다. 위임 방법에서 파일을 가져와야합니다.

그리고 즉시해야합니다. 그 사이에 KVO를 사용할 수 없습니다. 왜냐하면 위임 메서드가 실행되는 순간과 KVO를 통해 알림을받는 순간 사이에 파일이 파괴 될 수 있기 때문입니다. 우리가을 반환하면 URLSession:downloadTask:didFinishDownloadingToURL:에서 그것은 파괴 입니다. 그래서 안에 그 방법을 잡아야하고, 다른 곳에서는 찾아 볼 수 없습니다.

+0

대단히 감사합니다. – Tepmnthar

관련 문제