Zmierzyłem się z dziwnym problemem. Załaduję plik z Internetu, używając NSURLSession
i NSURLSessionDownloadTask
. Oto kodtotalBytesExpectedToWrite jest -1 w NSURLSessionDownloadTask
NSURLSessionConfiguration *sessionConfiguration =
[NSURLSessionConfiguration backgroundSessionConfiguration:kSessionId];
self.session = [NSURLSession sessionWithConfiguration:sessionConfiguration
delegate:self
delegateQueue:[NSOperationQueue new]];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSessionDownloadTask *downloadTask = [self.session downloadTaskWithRequest:request];
[downloadTask resume];
Moja klasa jest zadeklarowana jako NSURLSessionDownloadDelegate
i uzyskać wywołania zwrotne dobrze. Ale gdy system wywołuje metodę delegata
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
NSLog(@"totalBytesExpectedToWrite: %lld", totalBytesExpectedToWrite);
NSLog(@"%lld", totalBytesWritten);
}
totalBytesExpectedToWrite
zawsze równe -1
i nie mam możliwości, aby pokazać postęp dla użytkownika, ponieważ nie wiem rozmiar pobieranego pliku jest.
Czy możesz mi podpowiedzieć, gdzie popełniłem błąd?
To może być problem serwer gdzie nie jest prawidłowo wysłaniu 'nagłówek Content-Length' . Jeśli używasz tego samego adresu URL w przeglądarce, czy Twoja przeglądarka wyświetla właściwy postęp? – rmaddy