NSURLConnection:恢复功能

时间:2011-03-01 20:59:10

标签: iphone objective-c xcode download foundation

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

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

3 个答案:

答案 0 :(得分:2)

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

在该页面上搜索“正在恢复”

答案 1 :(得分:1)

当服务器想要用其他东西替换它已经给你的内容时,使用

multipart/x-mixed-replace。删除到目前为止您下载的所有内容是唯一明智的选择,当服务器告诉您将其丢弃并使用其他内容时,您无法继续下载内容。

  

文件下载触发多个 - (void)连接的可能性:(NSURLConnection *)连接didReceiveResponse:(NSURLResponse *)响应事件?

极不可能。它只用于某些类型的流式传输,而不是用于任何你需要下载管理器的东西。

答案 2 :(得分:0)

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