2012-01-16 12 views
2

私はRESTful WebサービスとやりとりするiPhoneアプリを作成しています。後ですべてのリクエストで使用するために認証トークンをリクエストする必要があります。可能であればマルチスレッドを避け、代わりに非同期NSURLConnectionメソッドを使用して、メインスレッドがブロックしないようにして、ユーザーインターフェイスの応答性を確保してください。NSURLConnectionを使用して非同期リクエストをシリアルで処理する

私が遭遇している問題は、トークンを同期要求をフェッチしてメインスレッドをブロックせずに、トークンがフェッチされるのを待つようにする方法がわからないことです。

トークンフェッチが完了したときに設定されたセマフォ値をループに入れて投げることができたのは私には起こりましたが、それはやり方が間違っているようです。これを正しく行う方法はありますか?

答えて

4

それ以降のiOS 5.0以上のために構築している場合は、あなたが使用することができます。

+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:] 

completionHandler:ブロックであなたの次の呼び出しを行います。

+0

これはそうするようですが、できるだけiOS 4.xとの互換性を保つことをお勧めします。標準のデリゲートコールでそれを行う方法はありませんか? – ceperry

+0

はい、同じことを行うには、標準の代理コールを絶対に使用することができます。最初のconnectionDidFinishLoading:callの結果として/の中の後続のリクエストを起動するだけです。 –

1

MKNetworkKitをご覧ください。マイナーな調整を行うと、トークンが戻ってくるまでキューをフリーズするように構成することができます。その時点で、addHeaders:を使用して、キュー内の既存の操作を変更して認証トークンを組み込むことができます。 「フリーズ」は、MKNKの主な機能の1つです。オフラインでもリクエストを作成し続けることができ、接続が確立されると送信されます。

関連する問題