2014-11-08 2 views
0

NSURLSession에는 백그라운드 구성으로 두 개 또는 세 개의 파일을 동시에 다운로드 할 수 있습니다. 모든 다운로드 작업을 모두 완료는, 각각이 완료되지 개별적으로 할 때 대리자 메서드URLSession 다운로드 작업 위임은 모든 작업이 완료된 후에 만 ​​호출합니다.

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask 
didFinishDownloadingToURL:(NSURL *)location 

-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task 
didCompleteWithError:(NSError *)error 

만 호출되는 것을 제외하고 잘 작동하는 것 같군. 다운로드 진행률 기능을 개별적으로 업데이트하는 다른 대리자 메서드입니다.

NSURLSessionConfigurationdefaultConfiguration으로 설정하면 문제가 발생하지 않지만 배경 다운로드가 제대로 작동하지 않습니다. 내가 놓친 게 있니? 각 다운로드 작업마다 별도의 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에 저장됩니다. 다운로드 작업은 작업이 완료되면 대리인 메서드의 사전에서 제거됩니다. 사전은 주로 진행 상황을 추적하고 작업을 취소하는 데 사용됩니다.

답변

0

NSURLSession의 다른 이상한 동작과 함께 iOS 시뮬레이터에만 해당되는 것으로 보입니다. 장치에서 코드를 실행하면 모든 것이 올바르게 작동합니다.

관련 문제