問題
私のアプリでは、ユーザーが写真をアップロードできます。これはうまくいきます。
現在、接続が遅いなどの理由で写真のアップロードが失敗した場合に、「再試行」機能を実装しようとしています。
これが私の再試行コードです:
self.operation = [self.operation copy]; // Creates a new operation with the same NSURLRequest
[self.operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
// do success stuff
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog("%@", error);
}];
[[MyAFHTTPClient sharedClient] enqueueHTTPRequestOperation:self.operation];
起動すると、失敗ブロックが呼び出され、次のように出力されます。
$0 = 0x12636b50 Error Domain=NSURLErrorDomain Code=-1021 "request body stream exhausted" UserInfo=0x12637810 {NSErrorFailingURLStringKey=https://my/long/url/, NSErrorFailingURLKey=https://my/long/url/, NSLocalizedDescription=request body stream exhausted, NSUnderlyingError=0x13046bb0 "request body stream exhausted"}
質問
画像のアップロードを正しく再開するようにコードを変更するにはどうすればよいですか?
私が試したこと
operation.request.HTTPBodyStream
問題は、NSInputStream
再起動できないことだと思います。
このメソッド-[AFURLConnectionOperation connection:needNewBodyStream:]
は、入力ストリームのコピーを提供するように見えます。そこにブレークポイントを設定しました。操作をコピーまたは開始するときに呼び出されず、トリガーする方法がわかりません。
AFNetworking GitHub ページで同様の問題についていくつかの議論がありますが、それは認証失敗後の再試行に関連しています。
他の情報
私のURLリクエストオブジェクトは次を使用して作成されます-[AFHTTPClient multipartFormRequestWithMethod:
path:
parameters:
constructingBodyWithBlock:]