Ios NSURLSession问题,后台有多个下载,有多个会话和多个段
我们用下面的配置代码包装了会话。我为我装箱的每个任务调用此方法Ios NSURLSession问题,后台有多个下载,有多个会话和多个段,ios,nsurlsession,multipart,nsurlsessiondownloadtask,Ios,Nsurlsession,Multipart,Nsurlsessiondownloadtask,我们用下面的配置代码包装了会话。我为我装箱的每个任务调用此方法 +(NSURLSession ) getNewSessionWithID:(NSString )sessionID delegateObject:(id)sender { NSURLSession *session; NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration
+(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];
}
-(void)DLRequestAllRenge:(NSMutableArray*)arrayrange和FileInfo:(FileInfo*)fileInfoObj
{
NSMUTABLEARRY*arrayAllParts=[[NSMUTABLEARRY alloc]init];
fileInfoObj.tempPath=[fileInfoObj UniqueFileName:[NSTemporaryDirectory()stringByAppendingString:[fileInfoObj.Name stringByDeletingPathExtension]];
[self-createTempDirectory:fileInfoObj.tempPath];
NSLog(@“请求会话:%@”,fileInfoObj.Session);
对于(int i=0;i