問題
NSURLConnection オブジェクトを生成するAFNetworkingを使用して写真をアップロードしています。
NSURLConnection は、への呼び出しを行っていません
- (void)connection:(NSURLConnection __unused *)connection
didSendBodyData:(NSInteger)bytesWritten
totalBytesWritten:(NSInteger)totalBytesWritten
totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
方法。(これはNSURLConnection.hで定義されたNSURLConnectionDataDelegate プロトコルの一部です)
リクエストは、写真が添付された HTTP POST リクエストです (Content-Disposition "form-data"、Mime タイプ "image/jpeg")。これにより、アップロードが進行するにつれて、このメソッドが定期的に呼び出されるようになるはずです。
プログレスバーをユーザーに表示するメソッドが必要です。ただし、メソッドは呼び出されていません。
ノート:
- デリゲートが適切に設定されています。他のデリゲート メソッドが呼び出される
- ファイルのアップロードが成功しました
AFNetworking コード
これは、AFNetworking の問題ではなく、NSURLConnection の問題であると確信しています。
ただし、念のため、AFHTTPClient
サブクラスの関連コードを次に示します。
NSMutableURLRequest *request = [self multipartFormRequestWithMethod:@"POST" path:path parameters:parameters constructingBodyWithBlock:constructor];
AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure];
if (constructor) {
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];
}
[self enqueueHTTPRequestOperation:operation];
私の AFHTTPClient サブクラスは、呼び出しているメソッドのいずれもオーバーライドしません。
multipartFormRequestWithMethod: path: parameters: constructingBodyWithBlock:
HTTPRequestOperationWithRequest: success: failure:
setUploadProgressBlock:
enqueueHTTPRequestOperation:
constructor
タイプを持つブロックで(void (^)(id<AFMultipartFormData>))
あり、そうではありませんnil
(コードをステップ実行することで検証されます)。
デバッガーに入力すると、ブロックが正しく設定されていることがpo operation.uploadProgress
わかります。$0 = 0x1301d9f0 <__NSMallocBlock__: 0x1301d9f0>
ファイルは常に正常にアップロードされますが、アップロード進行状況ブロックのコードが実行されないため、進行状況バーが更新されません。
質問
NSURLConnection がこのメソッドを呼び出さないのはなぜですか?
NSURLConnection が想定される状況はどのようなものですか? (十分に文書化されていないようです。)
そして最も重要なのは、アップロードの進行状況をユーザーに表示するにはどうすればよいですか?