NSURLSession
에는 백그라운드 구성으로 두 개 또는 세 개의 파일을 동시에 다운로드 할 수 있습니다. 모든 다운로드 작업을 모두 완료는, 각각이 완료되지 개별적으로 할 때 대리자 메서드URLSession 다운로드 작업 위임은 모든 작업이 완료된 후에 만 호출합니다.
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location
및
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error
만 호출되는 것을 제외하고 잘 작동하는 것 같군. 다운로드 진행률 기능을 개별적으로 업데이트하는 다른 대리자 메서드입니다.
NSURLSessionConfiguration
을 defaultConfiguration
으로 설정하면 문제가 발생하지 않지만 배경 다운로드가 제대로 작동하지 않습니다. 내가 놓친 게 있니? 각 다운로드 작업마다 별도의 NSURLSessions
을 사용해야합니까?
EDIT : 요청한대로 여기에 세션 및 구성을 만드는 코드가 있습니다. 기본 구성과 백그라운드 세션 구성을 모두 포함 시켰지만 하나만 작성에 사용되었습니다. 다운로드를 시작하기위한
if (!_backgroundURLSession) {
NSString *sessionID = [NSString stringWithFormat:@"%@.BackgroundSession", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]];
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:sessionID];
NSURLSessionConfiguration *defaultConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
_backgroundURLSession = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
}
가,
[_backgroundURLSession downloadTaskWithURL:[NSURL URLWithString:_url]]
가
NSURLSessionDownloadTask
만드는 데 사용됩니다, 다운로드 작업은 키와 URL과 함께
NSMutableDictionary
에 저장됩니다. 다운로드 작업은 작업이 완료되면 대리인 메서드의 사전에서 제거됩니다. 사전은 주로 진행 상황을 추적하고 작업을 취소하는 데 사용됩니다.