0

すでにここにある 1,000 を超える質問に加えて、さらに別の NSURLConnection の質問に煩わされて申し訳ありません。

シナリオは次のとおりです。動的に読み込まれる拡張現実機能を使用する iPhone アプリでは、新しい AR モデルが利用可能になると、ユーザーはそのモデルをダウンロードするように求められます。モデルは数 MB の大きさになる可能性があるため、ダウンロードすることを決定する前に、ダウンロードするすべてのモデルの合計サイズをユーザーに示す必要があります。

各ファイルのサイズを確認するには、非同期 NSURLConnection を使用しますが、応答 ([NSURLResponse expectedContentLength]) を取得したらダウンロードを停止します。これは、デリゲートの connection:didReceiveResponse: メソッドで実行できます。

私の質問は、この状態が発生するまでどのように待つことができるでしょうか? NSURLConnection をセットアップし、非同期に開始してから、connection:didReceiveResponse: メソッドが呼び出されるまで待機するにはどうすればよいですか? 私は NSCondition を使用してみました。これは、NSURLConnection をセットアップした後、および connection:didReceiveResponse: メソッドで条件を通知するときに待機させます。しかし、これはメインスレッドをフリーズさせるだけでした。何か案は?

4

1 に答える 1

1

たぶん、GET の代わりに HEAD リクエストを送信できます。これはサーバーの設定に依存する場合がありますが、Content-Length を含むヘッダーのみを取得する必要があります。NSMutableURLRequest を使用して、リクエスト メソッドを変更し、通常どおりレスポンスで expectedContentLength を読み取ることができる必要があります。

于 2012-09-27T21:03:55.380 に答える