问题
我正在使用生成 NSURLConnection 对象的AFNetworking来上传照片。
NSURLConnection 没有对
- (void)connection:(NSURLConnection __unused *)connection
didSendBodyData:(NSInteger)bytesWritten
totalBytesWritten:(NSInteger)totalBytesWritten
totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
方法。(它是NSURLConnectionDataDelegate 协议的一部分,在NSURLConnection.h中定义)
该请求是带有照片附件的 HTTP POST 请求(Content-Disposition “form-data”,Mime 类型“image/jpeg”)。随着上传的进行,这应该(我认为)会导致定期调用此方法。
我需要向用户显示进度条的方法。但是,该方法没有被调用。
笔记:
- 委托设置正确;调用其他委托方法
- 文件上传成功
AF网络代码
我很确定这是 NSURLConnection 问题,而不是 AFNetworking 问题。
但以防万一,这是我的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 应该在什么情况下?(它似乎没有很好的记录。)
最重要的是,如何向用户显示上传进度?