1

我正在用 Objective-C 编写一个下载管理器,我让它与恢复功能一起使用。我在收到数据时将数据写入磁盘,这样如果下载因任何原因中断,它应该从中断的地方继续。苹果说你应该期待一个或多个- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response事件。在这种情况下,他们说您应该重置您之前收到的所有数据,因为您的下载正在被重定向并且您已经收到的字节无效,所以我删除现有文件并使用 0 字节重新创建。但是,如果我多次收到此事件,我必须以部分下载的形式删除我之前收到的数据,这违背了恢复功能的目的。有针对这个的解决方法吗?

我想出的解决方案是:仅- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response在第一次之后重置我收到的事件的数据。这将解决大多数情况(我认为)。这在逻辑上合理吗?有更好的选择吗?- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response文件下载触发多个事件的可能性有多大?

4

3 回答 3

2

我的建议是使用已经解决了这个问题的人的库,我使用的是 ASIHttpRequest。可以在这里找到

在该页面上搜索“恢复”

于 2011-03-01T21:33:56.293 回答
1

multipart/x-mixed-replace当服务器想要用其他东西替换它已经给你的东西时使用。删除到目前为止下载的所有内容是唯一明智的选择,当服务器告诉您将其丢弃并改用其他内容时,您无法继续下载某些内容。

文件下载触发多个 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 事件的可能性有多大?

极不可能。它仅用于某些类型的流媒体,而不用于您需要下载管理器的任何内容。

于 2011-03-01T21:09:41.647 回答
0

这是一个漂亮而干净的库,我认为它具有您需要的功能: https ://github.com/Anviking/DownloadManager

于 2012-12-24T14:59:24.560 回答