11

现在 5.0 发布了,我们可以在不违反 Apple NDA 的情况下讨论它,我对新版本的 NSURLConnection 有疑问。这有一个新的委托,NSURLConnectionDownloadDelegate有两个关键方法。

  1. connection:didWriteData:totalBytesWritten:expectedTotalBytes:在文件下载过程中重复调用

  2. connectionDidFinishDownloading:destinationURL:下载完成时调用一次。

然后,下载的文件应该位于destinationURL(至少在此方法的生命周期内 - 目的是您获取它并将其移动到永久位置)。问题是:它不存在。那个目录是空的。我已将此作为错误报告给 Apple,他们告诉我这是他们已经知道的问题的重复。

如果有人对此有解决方法,或者发现他们可以成功使用此委托,请告诉我。

2011 年 10 月 17 日更新:我已经放弃了这个并回到了旧的委托,它在 5.0 中仍然可以正常工作,即使文档说委托方法只能通过 4.3 使用。

4

4 回答 4

4

显然仅适用于报亭应用程序。这个人可能已经找到了解决办法:

http://adamernst.com/post/18948400652/a-replacement-for-nsurlconnectiondownloaddelegate

或者,只需使用 NSURLConnection。但是,如果您实现 NSURLDownloadDelegate 方法,请注意,它们似乎覆盖了标准的 NSURLConnection 委托方法。如果它是您想要的 NSURLConnectionDownloadDelegate 的方便的 didWriteData: 方法,例如更新 UIProgressView,您可以通过从 http 响应中获取总文件大小并使用 NSURLConnection 的 didReceiveData: 方法来实现相同的目的。

于 2012-12-15T14:42:39.073 回答
1

即使现在NSURLConnectionDownloadDelegate也行不通。

这是一个很好的替代品:http: //github.com/jbrennan/JBContainedURLConnection

于 2011-12-01T08:12:21.500 回答
1

文档告诉该文件仅在调用委托方法时才保证存在,因此您需要在调用委托方法时将其复制到其他地方。

谷歌告诉我,当服务器发送一个神秘的文件名和/或 mime 类型时,人们遇到了问题。

于 2011-10-13T13:21:42.897 回答
1

伙计们,

我最近发现了这个新的 NSURLConnectionDataDelegate 协议。但是,iOS 5 文档并不完整。

新的 NSURLConnectionDataDelegate 协议在文档中,但使用它的新版本的 NSURLConnection 没有。该文档仍然告诉我们使用现已弃用的 NSURLConnectionDelegate 协议方法。

我收集到 NSURLConnection 现在会将数据从远程 URL 直接下载到本地磁盘上的文件中,就像 Mac OS 中的 NSURLDownload 类一样。我如何弄清楚这是如何工作的?

NSURLConnection 的标头暗示连接对象根据委托所遵循的 NSURLConnectionDelegate 协议的版本推断出您想要的内容。这看起来真的很牛逼。我以前从未听说过使用委托的协议一致性来控制类的行为。

于 2011-11-04T18:00:23.270 回答