首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSURLDownload resumeData nil

NSURLDownload resumeData nil
EN

Stack Overflow用户
提问于 2011-03-12 12:21:56
回答 2查看 849关注 0票数 1

我写了一个下载工具。它在NSURLDownload上运行得很好。但是当谈到恢复下载时,我遇到了一些问题。resumeData总是零!当我用jDownloader下载相同的文件时,停止下载,然后再继续,jDownloader继续下载!因此,使用这个文件和服务器是可能的!

代码:

代码语言:javascript
复制
- (void)startDownload {
    status = @"loading";
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

    urlDownload = [[NSURLDownload alloc] initWithRequest:theRequest delegate:self];
    [urlDownload setDeletesFileUponFailure:NO];

    if (!urlDownload) {
        [self error:@"Failed starting download request!"];
    }
}

测试:

代码语言:javascript
复制
- (IBAction)stopWithResumeOption:(id)sender {
    [urlDownload cancel];
    NSData *tempData = [urlDownload resumeData];

    NSLog(@"%@",tempData);
}

如果我在加载"stopWithResumeOption“的同时停止下载,我就会得到零!我是不是遗漏了什么?!

编辑:

resumeData到底会返回什么信息?如果只是已经下载的数据的长度,也许我可以自己创建这个resumeData?!以前有人试过吗?

编辑2:

下面是我试图恢复的一个文件的响应头:

代码语言:javascript
复制
{
    "Accept-Ranges" = bytes;
    "Cache-Control" = "max-age=0";
    Connection = "keep-alive";
    "Content-Length" = 43346723;
    "Content-Type" = "application/pdf";
    Date = "Sun, 13 Mar 2011 13:08:44 GMT";
    Etag = 1185n;
    Pragma = public;
    Server = dbws;
    "X-Robots-Tag" = "noindex,nofollow";
}

服务器甚至提供了一个ETag!

是否有机会这样做:

代码语言:javascript
复制
- (IBAction) resume:(id)sender {
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    NSString *authHeader = [NSString stringWithFormat:@"bytes=%llu-%llu",bytesReceived, totalBytesToLoad]; 
    [request addValue:authHeader forHTTPHeaderField:@"Range"];  

    urlDownload = [[NSURLDownload alloc] initWithRequest:request delegate:self];
}

但我不知道该怎么做.

EN

回答 2

Stack Overflow用户

发布于 2011-03-12 13:44:35

文档说:

取消 取消接收方的下载并删除下载的文件。

请考虑通过断开网络来模拟故障。不要忘记实现委托方法。

编辑:

文档还说:

resumeData 如果无法恢复下载,则返回零。 讨论 只有当下载协议和服务器支持恢复时,才会返回恢复数据。

您确定服务器支持恢复吗?

编辑2:

确保urlDownload在您的stopWithResumeOption:方法中不是nil

urlDownloadstartDownload方法中的assigned (它是如何声明的?)

尝试:

代码语言:javascript
复制
urlDownload = [[[NSURLDownload alloc] initWithRequest:theRequest delegate:self] retain];

并在适当的情况下记住[urlDownload release]

票数 1
EN

Stack Overflow用户

发布于 2012-07-21 13:07:02

我知道这是旧的,但希望这能节省一些时间。

到目前为止,文档中没有提到这一点,但是resumeData属性总是返回零,除非下载被取消或失败。

这似乎很不幸,因为这使得如果应用程序在下载过程中崩溃,很难恢复下载。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5282447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档