NSURLConnection(作为AFNetworking的一部分)不会调用NSURLConnectionDataDelegate委托

问题

我正在使用AFNetworking生成一个NSURLConnection对象来上传照片。

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”)。 这应该(我认为)导致在上传过程中定期调用此方法。

我需要该方法向用户显示进度条。 但是,该方法不会被调用。

注意:

  • 代表设置得当; 调用其他委托方法
  • 文件上传成功

AFNetworking Code

我很确定这是一个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))并且不是nil (通过逐步执行代码validation)。

当我在调试器中输入po operation.uploadProgress时,我看到$0 = 0x1301d9f0 所以我认为正确设置了块。

该文件始终上传成功,但上传进度块中的代码未运行,因此我的进度条永远不会更新。

问题

为什么NSURLConnection不调用此方法?

NSURLConnection应该是什么情况? (它似乎没有详细记录。)

最重要的是,如何向用户显示上传进度?

该库可能实现了一个connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite: NSObject类别中的方法。 这将是非常讨厌的,但这可以解释为什么不调用AFURLConnectionOperation的方法。

为了检查这个假设,您可以在已编译的二进制文件上运行class-dump 。 在输出中搜索didSendBodyData: . 如果某个类别中存在匹配项,则图书馆显然负有责任。 该库也可能会弄乱Objective-C运行时,但这比仅运行类转储更难检测。

第三方错误报告库覆盖了NSURLConnection上的委托方法。 删除库解决了该问题。 (AFNetworking或NSURLConnection都没有问题。)

如果您能提供可以更快地解决此问题的故障排除步骤,我将奖励您。 (请记住,第三方库已编译,因此源代码搜索不起作用。)