【问题标题】:Need assistance regarding NSURLConection需要有关 NSURLConection 的帮助
【发布时间】:2012-11-19 06:40:11
【问题描述】:

在我的单一视图中,我有图像和音频文件的上传和下载选项,我成功实现了下载代码,进度条指示下载进度。

我在显示上传进度时遇到问题,目前我正在使用[NSURLConnection sendAsynchronousRequest: 但我也想显示上传进度,此方法没有关于数据进度的回调块或委托函数。所以我尝试使用connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:,但是这个方法会如何触发呢?

为了下载,我这样做是为了触发 NSURLConnectionDataDelegate 方法并完成我的工作。

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

如果我使用[NSURLConnection connectionWithRequest:someReq delegate:self] 进行上传,我将在一个文件中设置两次委托,第一次是调用上传方法时,第二次是调用下载方法时,这是正确的方法吗?

最后[NSURLConnection sendAsynchronousRequest:有什么用处,它没有关于数据进度的委托或回调,为什么要使用它?

【问题讨论】:

  • 你试过AFNetworking吗?
  • 我不想使用任何库...感谢您的回复。
  • 为什么不呢? =) 它建立在 NSURLConnection 之上!
  • 我也在努力学习基础知识......在了解了基础知识之后我没有任何问题。
  • 如果您能解决我问的困惑,我将不胜感激。

标签: ios nsurlconnection


【解决方案1】:

下载和上传可以是应用程序的两个不同时刻。如果您创建两次负责启动NSURLConnection 的对象,则将self 设置为委托两次确实有意义,否则没有意义。

完整的方法签名是sendAsynchronousRequest:queue:completionHandler:,这有很大的不同。在这种情况下,您不需要设置委托,因为响应来自处理程序 (NSData *)。

【讨论】:

  • 请再做一件事,通过 sendAsynchronousRequest:queue:completionHandler: 无法显示上传进度?我说的对吗?
  • 我认为你不能使用sendAsynchronousRequest:queue:completionHandler:,因为你只有一个completionHandler(当你得到你想要的东西时调用)。 connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:,已被弃用,所以你不应该使用它。
  • 那么如何通过上传进度条异步上传呢?
  • connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite: 不推荐使用,我参考了苹果文档。