0

合理的な答えが見つからなかったので、この特定のケースについて尋ねます。

http 呼び出し (特定のヘッダーをトークン値として設定) を実行し、返された json を解析する必要があります。json は、「操作完了」メッセージまたは「トークン期限切れ」メッセージの両方を返すことができます。

トークンの有効期限が切れた場合、更新されたトークンを提供する別の http 呼び出しを実行し、トークンをヘッダーとして設定し、元の http 呼び出しを再実行する必要があります。

私はこの解決策を採用することに決めました:メインスレッドから、次を使用して別のスレッドを作成します

...
dispatch_async(feedQueue
... 

このスレッドでは、上記の呼び出しを同期呼び出しとして実行します。

...
[NSURLConnection sendSynchronousRequest:urlRequest
...

フローの最後にのみ、結果をブロックに渡すメインスレッドを呼び出します。

このように、コードはシンプルで読みやすく、直線的なフローを持ち、固有のスレッド内で完全にスコープされ、呼び出しチェーンを管理するためにデリゲートやさまざまな「有限状態」をいじることはありません。

しかし、有限状態または NSOperation インスタンスの両方を使用して、人々が非同期呼び出しを採用することを提案する同様の質問を読んだので、これが私の特定のユースケースに最適なアプローチであるかどうかはわかりませんが、これらの両方が非同期呼び出しに基づくアプローチは、http 呼び出しチェーンの最適なソリューションではありません。

最善のアプローチは何ですか?http 呼び出しのチェーンを正しく実装するにはどうすればよいですか?

4

1 に答える 1

0

これを設定する正しい方法は、NSURLConnection の非同期呼び出しを使用することです。connectionDidFinishLoading では、終了したばかりの接続をインターセプトし、次のチェーンされた http 接続を開始します。

_connection1 というプライベート変数をセットアップします。

したがって、基本的には、次のようなことを行います

NSURLRequest * request1 = ...

_connection1 = [[NSURLConnection alloc] initWithRequest:request1 delegate:self];


In the 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{

if([connection isEqual:_connection1]){
NSURLRequest *request2 = ...
_connection2 = [NSURLConnection...]


}

if([connection isEqual:_connection2]){
NSURLRequest *request3 = ...
_connection2 = [NSURLConnection...request3 ]


// And so on ....

}

}

于 2013-08-23T11:32:58.027 に答える