NSURLConnectionDownloadDelegate expectedTotalBytes iOS 6中的零

时间:2012-09-25 12:20:13

标签: ios ipad nsurlconnection ios6

我的

有问题
connection:didWriteData:totalBytesWritten:expectedTotalBytes:
NSURLConnectionDownloadDelegate

方法 在iOS 6下。

iOS 5 Simulator 下,它运行正常,为我提供了正确的expectedTotalBytes值。

iOS 6 Simulator 上,expectedTotalBytes始终返回0. totalBytesWritten值仍然正确。

这是相同的请求,相同的URL,只是操作系统版本不同。

有没有人遇到类似的问题或者有什么可能导致这个问题?

干杯 金

1 个答案:

答案 0 :(得分:7)

花了很多时间调查同一个问题。事实证明,在iOS6中,首先使用HEAD来调查标头,这不是那么异常。

但是,似乎忽略了对实际GET请求的响应的标头。 因此,如果您的服务器不支持HEAD或针对给定URL返回HEAD请求的0内容长度,则iOS NSURLConnection将使用错误的信息。

我的问题是我的自定义服务器不支持我正在下载的文件的HEAD请求,而是返回405(不允许HTTP错误405方法),它在自己的响应中包含一个内容长度,然后iOS6在返回expectedTotalBytes时使用,而不是GET响应中的正确答案。

为了解决我的问题,我首先为我的文件下载请求启用了HEAD,然后确保返回了正确的内容长度。验证:

curl -v -I http://url
...
< Content-Length: 23493947
Content-Length: 23493947

不确定这是iOS6中的错误还是更好地符合HTTP标准。希望能帮助他人。