4

我有一个问题

connection:didWriteData:totalBytesWritten:expectedTotalBytes:

iOS 6 下的NSURLConnectionDownloadDelegate方法。

iOS 5 模拟器下它工作得很好,给了我正确的 expectedTotalBytes 值。

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

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

有没有人遇到过类似的问题或知道可能导致这种情况的原因?

干杯金

4

1 回答 1

7

刚刚花了很多时间调查同样的问题。原来是在iOS6中,请求首先是用HEAD发出来调查headers的,这并没有那么异常。

但是,似乎忽略了对实际 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 标准。希望对其他人有所帮助。

于 2012-09-30T19:55:00.550 回答