почему [responsepectedContentLength] всегда возвращает -1 - PullRequest
9 голосов
/ 14 сентября 2011
-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse    *)response {
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    if([recievedData length]) [ recievedData setLength:0 ];

    download_size =[response expectedContentLength];
}

У меня есть этот код. download_size - это NSInteger. Ожидаемое возвращение всегда возвращает: -1. Может кто знает почему? Я пытался использовать долго, но эффект был тот же.

Спасибо за помощь.

Ответы [ 2 ]

22 голосов
/ 15 сентября 2011

Ожидаемая длина содержимого устанавливается только тогда, когда сервер предоставляет ее, например, с помощью заголовка ответа Content-Length. Размер -1 означает, что ожидаемый размер содержимого неизвестен.

Если вы установите Accept-Encoding: gzip в своем запросе, система загрузки URL-адресов выдаст ошибку и сообщит вам, что ожидаемый размер равен -1, независимо от того, какой Content-Length отправляет сервер. Это происходит потому, что он распаковывает данные перед их передачей вам, но не может знать окончательный размер несжатого файла до тех пор, пока все данные не будут загружены, что происходит после того, как вы получите этот обратный вызов.

0 голосов
/ 14 сентября 2011

Насколько я знаю, NSURLResponse не обновляет это свойство. Вам нужно использовать NSHTTPURLResponse вместо ...

...