2011-05-19 4 views
4

ASIHTTPRequestを再試行する方法はありますか?基本的なHTTP認証の代わりにRESTサービスでカスタム認証を使用しています。セッションが期限切れの場合はリクエストを再試行したいと思います。リクエストで2回目のstartAsynchronousを呼び出すと、例外が発生します。ASIHTTPRequestを再試行できますか?

[request setCompletionBlock:^{ 
     if ([request responseStatusCode] == 500) 
     { 
      // try to login again in case token expired 
      [server loginAndRetryRequest:request]; 
     } else { 
      // parse response 
     } 
    }]; 

loginAndRetryRequest:ログインするために別のASIHTTPRequestを行いますし、それが完了したとき、それはCompletionBlock(これは何とか可能であると仮定)だから、それは再び元の要求を開始します私はこのような何かをしたいですか?

答えて

5

要求のコピーを作成してから、コピーで-startAsynchronousを再度実行する必要があります。

NSCopyingプロトコルのサポートもタイムアウトの場合に自動再試行(セレクタ-setNumberOfTimesToRetryOnTimeout:を含むリリース1.5に加えた。

別のオプションは、自動再試行をした場合に行われるかを確認するために、それらのソースコードをチェックすることができますタイムアウトだが、要求をコピーして再発行する必要がある(これがNSCopyのサポートを追加する理由である)。

+2

setCompletionBlockの代わりにsetDidFinishSelectorを使用する場合のみ要求をコピーする。 ASIHTTPRequestのcopyWithZoneは完了ブロックをコピーしていないようだし、自分でそれをやろうとするとうまくいかない彼女。これはバグでしょうか?少なくとも私は今それを行う方法があります。ありがとう! – Rn222

関連する問題