AFNetworking + JSON +进度下载

时间:2012-02-08 21:00:23

标签: json afnetworking

我正在使用AFNetworking并非常喜欢它。 我需要从我的服务器获取JSON数据,没关系,它完美无缺。

我添加了setDownloadProgressBlock,但我认为它无法与JSON下载一起使用:可能无法获得要下载的估计字节数。

我的代码:

  NSMutableURLRequest *request = [[VinocelaHTTPClient sharedClient] requestWithMethod:@"GET" path:@"ws/webapp/services/pull" parameters:nil];

  AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request 
                                                                                      success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) 
  {
  }  

  } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON)
  {
  }];

  [operation setDownloadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) {
    NSLog(@"Get %d of %d bytes", totalBytesWritten, totalBytesExpectedToWrite);

  }];

  [operation start];

我的结果:

  

得到27129个-1字节

     

获取127481的-1个字节

     

获得176699的-1个字节

所以,我认为AFNetworking无法估计下载JSON数据时的实际尺寸,而不是zip文件或图像?

1 个答案:

答案 0 :(得分:2)

通过仔细阅读源代码,似乎进程回调只是传递了缓存的内部expectedContentLength对象的NSHTTPURLResponse属性。因此,如果由于某种原因,您的服务器未正确发送Content-Length标头,和/或正在进行分块传输编码,则该值未知,并返回值NSURLResponseUnknownLength(恰好是定义为-1)。

尝试检查应用上下文之外的HTTP请求返回的标头。如果您获得具有合理值的Content-Length标头,则问题可能在于AFNetworking本身。如果不存在,问题在于服务器。我从来没有见过HTTP服务器使用分块传输编码发送JSON响应(大多数情况下内容大小应该相对较小并且在发送标头时已知),但是这样做是符合规范的。 / p>