NSURLSession在后台有多个会话和多个细分受众群的多次下载问题

时间:2015-08-19 14:32:12

标签: ios nsurlsession multipart nsurlsessiondownloadtask

我们使用以下配置代码创建了会话。我把这个方法称为我创作的每个任务。

+(NSURLSession ) getNewSessionWithID:(NSString )sessionID delegateObject:(id)sender 
{
    NSURLSession *session;
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:sessionID];
    NSOperationQueue *queue=[[NSOperationQueue alloc]init];
    queue.maxConcurrentOperationCount=10;
    queue.name=sessionID;

    session = [NSURLSession sessionWithConfiguration:configuration delegate:sender delegateQueue:queue];

    NSLog(@"Session ID :%@",session);
    NSLog(@"QUEUE : %@",queue);
   return session;
}

即使为多个任务创建了多个会话,也只有一个会话处于活动状态且只有一个任务正在执行,对于该任务,只有三个部分正在为该一个会话下载。

调用此方法来创建和启动下载任务。

-(void)DLRequestAllRenge:(NSMutableArray*)arrayrange andFileinfo:(FileInfo *)fileInfoObj
{
    NSMutableArray *arrayAllParts=[[NSMutableArray alloc]init];
    fileInfoObj.tempPath=[fileInfoObj UniqueFileName:[NSTemporaryDirectory() stringByAppendingString:[fileInfoObj.Name stringByDeletingPathExtension]]];
    [self createTempDirectory:fileInfoObj.tempPath];
    NSLog(@"REQ Session:%@",fileInfoObj.session);
    for (int i=0; i<arrayrange.count; i++)
    {
        NSString *rangString = [arrayrange objectAtIndex:i];
        NSMutableURLRequest *request=[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:fileInfoObj.URL]];
        [request setValue:rangString forHTTPHeaderField:@"Range"];

        NSString *fileName=[NSString stringWithFormat:@"%@(%d).data",[fileInfoObj.Name stringByDeletingPathExtension],i];
        NSString *filePath=[fileInfoObj.tempPath stringByAppendingPathComponent:fileName];
        FileInfo *subFileInfo=[[FileInfo alloc]init];
        subFileInfo.URL=fileInfoObj.URL;
        subFileInfo.Name=fileName;
        subFileInfo.Path=filePath;
        subFileInfo.Folder=[fileInfoObj getCurrentFolderName:filePath];
        subFileInfo.Range=rangString;
        subFileInfo.isDownloaded=NO;
        subFileInfo.NSUrlSessionID=fileInfoObj.NSUrlSessionID;
        subFileInfo.Progress=@"0";
        subFileInfo.Priority=[NSString stringWithFormat:@"%d",i];
        subFileInfo.fileDetail=@"Connecting...";
        subFileInfo.fileStatus=RequestStatusDownloading;
        subFileInfo.request=request;
        subFileInfo.startTime=[NSDate date];
        NSURLSessionDownloadTask *downloadTask = [fileInfoObj.session downloadTaskWithRequest:request];
        downloadTask.taskDescription=filePath;
        [downloadTask resume];
        subFileInfo.DownloadTask=downloadTask;
        [arrayAllParts addObject:subFileInfo];

    }
    fileInfoObj.parts=arrayAllParts;

    [downloadingArray addObject:fileInfoObj];

    [bgDownloadTableView reloadData];

}

第1期 为什么所有会话都不活跃?

第2期 为什么只下载一个任务和一个会话的三个部分?

我们有什么方法可以同时激活更多会话以供下载更多部分?

请帮我解决这个问题。任何帮助表示赞赏。

更新

我们可以使用上述代码下载数据,但问题是,当使用-suspend-cancel停止任何下载任务时,我无法获取任何下载数据。

有什么方法可以检索原始数据而不是resumeData但是原始下载的数据?

0 个答案:

没有答案