现在5.0已经启动,我们可以在不违反Apple的NDA的情况下进行讨论,我对NSURLConnection的新版本存在问题。这有一个新的委托,NSURLConnectionDownloadDelegate
有两个关键方法。
connection:didWriteData:totalBytesWritten:expectedTotalBytes:
被重复调用
connectionDidFinishDownloading:destinationURL:
会被调用一次。
下载的文件应该在destinationURL(至少在这个方法的生命周期中 - 意图是你得到它并将它移动到永久的某个地方)。问题是:它不在那里。那个目录是空的。我已将此报告为Apple的错误,他们告诉我这是他们已经知道的问题的重复。
如果有人为此做了解决方法,或者发现他们可以成功使用此委托,请告知我们。
更新10/17/2011:我已经放弃了这一点并回到了旧代表,即使文档中说代理方法只能通过4.3来提供,但仍可在5.0中正常工作。
答案 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