4

問題があります

connection:didWriteData:totalBytesWritten:expectedTotalBytes:

iOS 6でのNSURLConnectionDownloadDelegateのメソッド。

iOS 5 シミュレーターでは問題なく動作し、正しい expectedTotalBytes 値が得られます。

iOS 6 シミュレーターでは、expectedTotalBytes は常に 0 を返します。totalBytesWritten 値は依然として正しいです。

OSのバージョンが違うだけで、同じリクエスト、同じURLです。

誰かが同様の問題に遭遇したことがありますか、または何が原因であると考えていますか?

乾杯キム

4

1 に答える 1

7

同じ問題の調査にかなりの時間を費やしました。iOS6ではヘッダーを調査するために最初にHEADでリクエストが行われることが判明しましたが、これはそれほど異常ではありません。

ただし、応答から実際の G​​ET 要求へのヘッダーは無視されるようです。その結果、サーバーが HEAD をサポートしていないか、特定の URL に対する HEAD リクエストに対して 0 のコンテンツ長を返した場合、iOS NSURLConnection は間違った情報を使用します。

私の問題は、カスタム サーバーが、ダウンロードしているファイルの HEAD 要求をサポートしておらず、代わりに 405 (HTTP エラー 405 メソッドは許可されていません) を返したことでした。 GET 応答から 1 つを修正します。

問題を解決するために、まずファイル ダウンロード リクエストに対して HEAD を有効にしてから、正しいコンテンツの長さが返されるようにしました。検証済み:

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

それが iOS6 のバグなのか、HTTP 標準への準拠が向上しただけなのかは不明です。他の人に役立つことを願っています。

于 2012-09-30T19:55:00.550 に答える