NSURLConnection を使用して非同期呼び出しを行っている iPad アプリケーションがあります。場合によっては、connection:didReceiveData:ですべての応答データを受け取りますが、connectionDidFinishLoading が呼び出されることはありません。エラーはありません。同じ応答が他の時点で完了するため、これは多少ランダムです。
私のクラスの仕組みは、次を使用して約 20 のリクエストが連続して送信されることです。
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
そして、彼らが戻ってくるのを待つだけです。これは複数のリクエストを作成する有効な方法ですか?
完了しなかった応答のサンプル ヘッダーを次に示します。完了した応答のヘッダーと見分けがつきません。
>Keep-Alive: timeout=5, max=100
>Transfer-Encoding: Identity
>Server: Apache/2.2.9 (Unix) mod_ssl/2.2.9 OpenSSL/0.9.8b mod_jk/1.2.26
>Content-Type: application/json;charset=UTF-8
>Connection: Keep-Alive
>Date: Wed, 03 Apr 2013 05:25:32 GMT
>Cache-Control: private, no-transform, max-age=600
問題の奇妙な症状の 1 つは、予想されるコンテンツの長さを次のようにチェックし始めたことです。
long long download_size =[response expectedContentLength];
Content-Length が http ヘッダーに設定されることはありません。リクエストが失敗した場合、download_size は -1 (予想) です。同じリクエストが失敗しなかった場合、download_size は何らかの数値に設定されます。ただし、download_size が設定されておらず、応答が失敗しない場合が多くあります。