2014-02-21 4 views
0

У меня есть следующий код, который стартует загрузку с NSURLSession, но ни один из методов делегата не называются:Почему мой NSURLSession никогда не начинается?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 

    NSURLSessionDataTask *dataTask1 = [session dataTaskWithURL:[NSURL URLWithString:@"http://i.imgur.com/RARAP1J.jpg"]]; 
    NSURLSessionDataTask *dataTask2 = [session dataTaskWithURL:[NSURL URLWithString:@"http://i.imgur.com/JR9ZihS.jpg"]]; 
    NSURLSessionDataTask *dataTask3 = [session dataTaskWithURL:[NSURL URLWithString:@"http://i.imgur.com/f4w08VP.jpg"]]; 
    NSURLSessionDataTask *dataTask4 = [session dataTaskWithURL:[NSURL URLWithString:@"http://i.imgur.com/MzWvRKa.jpg"]]; 

    [dataTask1 resume]; 
    [dataTask2 resume]; 
    [dataTask3 resume]; 
    [dataTask4 resume]; 
} 

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { 
    NSLog(@"yep"); 
} 

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { 
    NSLog(@"YEAH"); 
} 

Я не знаю, почему это происходит. Что я делаю не так?

+0

затем делегируйте его. –

+0

У вас есть делегаты? – footyapps27

ответ

0

Моя бы вы не установили делегата для сеанса Ьгу инициализации сессии с

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil]; 
+0

У меня создалось впечатление, что это создало очередную очередь. Я хочу убедиться, что запросы могут выполняться параллельно. –

+0

, если вы установите делегатQueue равным нулю. все запросы будут вызывать в другой теме. поэтому он выполняется параллельно – larva

+0

Но документация утверждает, что создает очередность очереди. –

0

Вы говорите:

[NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]] 

Вы не указали делегата, так как вы получите любые обратные вызовы ? Ты не можешь. Вам нужно будет создать свою задачу данных, вызвав dataTaskWithURL:completionHandler:, чтобы вы могли добавить обработчик завершения.

Конечно, было бы лучше, если бы вы позвонили sessionWithConfiguration:delegate:delegateQueue:, потому что тогда вы могли бы назначить себя делегатом. Но вы не так очевидно, что эти методы делегатов никогда не будут вызваны.