首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSURLSessionTask downloadTask的文件下载程序

使用NSURLSessionTask downloadTask的文件下载程序
EN

Stack Overflow用户
提问于 2017-05-15 18:20:29
回答 1查看 534关注 0票数 1

我想创建文件下载管理器下载多个文件与下载百分比与播放,暂停,删除功能。

我尝试下面的代码下载多个文件成功...but无法添加进度条请帮助

代码语言:javascript
复制
for (int i = 0; i < [arr_bookChapter count]; i++) {
  NSURLSessionTask * downloadTask = [session downloadTaskWithURL: downloadfileUrl completionHandler: ^ (NSURL * location, NSURLResponse * response, NSError * error) {
      if (error == nil) {
          NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse * ) response;

          if ([httpResponse statusCode] == 200) {

              //download file save here                                                      

              dispatch_queue_t backgroundQueue = dispatch_queue_create("dispatch_queue_#1", 0);
              dispatch_async(backgroundQueue, ^ {

                  dispatch_async(dispatch_get_main_queue(), ^ {
                      // NSError *error;

                      //download complete here

                  });
              });
          }
      } else {
          //faile                                                  
      }

  }];
  [downloadTask resume];
}

这里我得到了swift code:有人可以为objective-C创建或提供解决方案吗

EN

回答 1

Stack Overflow用户

发布于 2017-05-15 18:51:44

你可以很容易地做到这一点,你只需要在你的ViewContorller中实现这些委托。

代码语言:javascript
复制
<NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSessionTaskDelegate>

然后你需要遵循下面的代码:

代码语言:javascript
复制
@property (nonatomic, retain) NSMutableData *dataToDownload;
@property (nonatomic) float downloadSize;

- (void)viewDidLoad {
    [super viewDidLoad];

    NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];

    NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]];

    NSURL *url = [NSURL URLWithString: @"your url"];
    NSURLSessionDataTask *dataTask = [defaultSession dataTaskWithURL: url];

    [dataTask resume];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {
    completionHandler(NSURLSessionResponseAllow);

    progressBar.progress=0.0f;
    _downloadSize=[response expectedContentLength];
    _dataToDownload=[[NSMutableData alloc]init];
}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
    [_dataToDownload appendData:data];
    progressBar.progress=[ _dataToDownload length ]/_downloadSize;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43976968

复制
相关文章

相似问题

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