NSURLConnectionDownloadDelegate文件问题

11

现在5.0版本已经发布,我们可以在不违反苹果的NDA协议的前提下讨论它。我有一个关于新版 NSURLConnection 的问题。这个版本有一个新的委托,NSURLConnectionDownloadDelegate,包含两个关键方法:

  1. connection:didWriteData:totalBytesWritten:expectedTotalBytes: 在文件下载进程中会反复调用。

  2. connectionDidFinishDownloading:destinationURL: 文件下载完成时只会调用一次。

下载的文件应该会出现在 destinationURL 中(至少在这个方法的生命周期中是这样的——意图是让您获取它并将其移动到一个永久存储的地方)。问题是:它不在那里。那个目录是空的。我已向苹果报告了这个 bug,他们告诉我这是他们已经知道的一个问题的副本。

如果有人有解决办法,或者发现他们可以成功使用这个代理,请让我知道。

更新 10/17/2011: 我已放弃使用此代理,并回到旧的代理,即使文档说这些代理方法仅适用于 4.3 版本,但在 5.0 版本中仍可以正常工作。


1
我已将此问题提交给苹果公司。苹果确认了这是一个错误,并将其标记为重复,因此至少有另外一人报告了此问题。 - DBD
1
这个bug仍然存在,在iOS 6上 - 你找到任何解决办法了吗?我有演示该问题的示例代码。 - user441669
同样的问题在这里,iOS 6.0.1。 - thomers
有人找到解决方案了吗? - abi
4个回答

4
显然,它仅适用于Newsstand应用程序。这个人可能已经找到了一个解决办法:http://adamernst.com/post/18948400652/a-replacement-for-nsurlconnectiondownloaddelegate。或者,只需使用NSURLConnection。但是请注意,如果您实现了NSURLDownloadDelegate方法,则似乎会覆盖标准的NSURLConnection委托方法。如果您需要方便的didWriteData:NSURLConnectionDownloadDelegate方法,例如更新UIProgressView,则可以通过从http响应中获取总文件大小,并使用NSURLConnection的didReceiveData:方法来实现相同的功能。

1

1
各位,
我最近发现了这个新的NSURLConnectionDataDelegate协议。然而,iOS 5文档是不完整的。
新的NSURLConnectionDataDelegate协议在文档中有提到,但使用它的新版本NSURLConnection却没有。文档仍然告诉我们使用已经过时的NSURLConnectionDelegate协议方法。
我了解到NSURLConnection现在会直接将远程URL的数据下载到本地磁盘上的文件中,就像Mac OS中的NSURLDownload类一样。我该如何弄清楚这是如何工作的?
NSURLConnection的头文件暗示连接对象根据委托符合的NSURLConnectionDelegate协议的哪个版本来推断您想要什么。这似乎非常混乱。我以前从未听说过使用委托的协议符合作为控制类行为的方式。

Duncan,我在我的iOS5文档中找不到NSURLConnectionDataDelegate。有一个新的NSURLConnectionDownloadDelegate,这是上面讨论的主题。如果按照文档中描述的使用该委托,则应该下载的文件不存在于临时位置中,它应该被找到。但是,如果按照NSURLConnection的类引用中所述使用现在已弃用的方法,则会发现它们仍然可以正常工作,尽管警告说它们只能通过iOS 4.3使用。 - millport

1

文档说明文件仅在调用委托方法时保证存在,因此您需要在调用委托方法的同时将其复制到其他地方。

谷歌告诉我,当服务器发送加密的文件名和/或 MIME 类型时,人们会遇到问题。


谢谢。我确实在尝试在方法内移动它。文件名是catalog.sqlite,看起来并不太神秘,但我会尝试使用更简单的名称并回报结果。 - millport
1
不行。无法使用pdf或jpg文件。我可以打印出[destinationURL path]并查看文件路径和文件名。但是,调用[[NSFileManager defaultManager] fileExistsAtPath:[destinationURL path]]会返回false。 - millport
你的类只实现了 NSURLConnectionDownloadDelegate 这个与 NSURLConnection 相关的协议吗? - Martin Ullrich
那加上NSURLConnectionDelegate协议,其中我只使用didReceiveResponse。 - millport
尝试注释掉那一个... 现在的 NSURLConnection 在传递委托类型时表现不同(我认为这是一个糟糕的设计)。 - Martin Ullrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接