重试URLSession中的失败下载:task:didCompleteWithError

时间:2016-08-02 07:03:03

标签: ios objective-c nsurlsession

如何在延迟后恢复下载任务?

我看了一下这个帖子:

iOS NSURLSession, how to retry in didCompleteWithError

Rob建议的第三种方法是我正在尝试做的,但我不知道如何设置延迟。

到目前为止,我有这样的事情:

-(void)URLSession:(NSURLSession*)session task:(NSURLSessionTask*)task didCompleteWithError:(NSError*)error {
  if ( error == nil )
    return;

  NSData* resume_data = error.userInfo[NSURLSessionDownloadTaskResumeData];
  NSURLSessionDownloadTask* new_task = [_session downloadTaskWithResumeData:resume_data];  
  [new_task resume];
}

我想等10秒钟(比如说)然后恢复。

2 个答案:

答案 0 :(得分:2)

延迟后你不应该恢复它。如果没有网络连接,这将导致您的应用使用大量资源。

相反,请使用reachability确定何时再次尝试。从原始URL为确切的主机创建可访问性对象,当该可访问性对象显示主机可访问时,请重试该请求。

答案 1 :(得分:1)

如果[new_task resume]有效,那么:

[new_task performSelector:@selector(resume) withObject:nil afterDelay:10.0]