NSURLConnectionDownloadDelegate文件问题

时间:2011-10-13 12:55:26

标签: ios nsurlconnection ios5 nsurlconnectiondelegate

现在5.0已经启动,我们可以在不违反Apple的NDA的情况下进行讨论,我对NSURLConnection的新版本存在问题。这有一个新的委托,NSURLConnectionDownloadDelegate有两个关键方法。

    文件下载正在进行时,
  1. connection:didWriteData:totalBytesWritten:expectedTotalBytes:被重复调用

  2. 下载完成后,
  3. connectionDidFinishDownloading:destinationURL:会被调用一次。

  4. 下载的文件应该在destinationURL(至少在这个方法的生命周期中 - 意图是你得到它并将它移动到永久的某个地方)。问题是:它不在那里。那个目录是空的。我已将此报告为Apple的错误,他们告诉我这是他们已经知道的问题的重复。

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

    更新10/17/2011:我已经放弃了这一点并回到了旧代表,即使文档中说代理方法只能通过4.3来提供,但仍可在5.0中正常工作。

4 个答案:

答案 0 :(得分:4)

显然只适用于报亭应用。这家伙可能找到了解决方法:

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

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

答案 1 :(得分:1)

文档告诉只有在调用委托方法时才保证文件存在,所以在调用委托方法的那一刻你需要将它复制到其他地方。

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

答案 2 :(得分:1)

民间,

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

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

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

NSURLConnection的标头提示连接对象根据委托符合的NSURLConnectionDelegate协议版本推断出您想要的内容。这看起来真的很棘手。我从来没有听说过使用委托的协议一致性作为控制类行为的方法。

答案 3 :(得分:1)

即使现在NSURLConnectionDownloadDelegate也不起作用。

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