iOS多个视频下载与停止下载的处理

视频下载我使用的是

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
    
    self.download = [self.urlSessionManager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        if (progress && downloadProgress.finished) {
            progress(downloadProgress.completedUnitCount, downloadProgress.totalUnitCount);
        }
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        // 这里要返回一个NSURL,其实就是文件的位置路径
        NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        // 使用建议的路径
        path = [path stringByAppendingPathComponent:response.suggestedFilename];
        NSLog(@"》》》%@",path);
        // 转化为文件路径
        return [NSURL fileURLWithPath:path];
    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        if (completion) {
            completion(filePath, error.localizedDescription);
        }
    }];
    [self.download resume];

此处self.urlSessionManager是AFURLSessionManager的对象

后台传的视频地址是一个数组,所以我用了for循环来下载,开始时暂停下载里只写了[self.download cancle],后来发现我暂停后下载任务还在执行,仔细一想是因为for循环创建了多个下载队列,我暂停的时候只是暂停了其中一个队列,后来只能在网上查资料停止当前所有下载队列的解决办法。

// 取消当前所有的网络请求
    NSMutableArray *taskData = [NSMutableArray arrayWithArray:[self.urlSessionManager downloadTasks]];
    [taskData enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if (((NSURLSessionDownloadTask *)obj).state != NSURLSessionTaskStateCompleted) {
            [(NSURLSessionDownloadTask *)obj cancel];
        }
    }];
    [taskData removeAllObjects];

后来又找到了这个方法,使用以后发现还是差点儿什么,于是我就在停止的地方加上了一个for循环并同步执行,然后停止方法起了作用。

你可能感兴趣的:(iOS多个视频下载与停止下载的处理)