-1

Benim durumumda, bir Uygulama başladığında, NSURLSessionDataTask kullanarak 3 web API'sini aramak istiyorum. Her API için 3 farklı metodum var ve her bir metodun içinde bir tane NSURLSessionDataTask var.Seri olarak birden çok NSURLSessionDataTask nasıl çalıştırılır?

Kodumu, bu 3 yöntem seri olarak yürütecek şekilde biçimlendirmek istiyorum. Çünkü B yöntemi, A yanıtı yöntemine bağlıdır ve yöntem B, B yanıtının cevabına bağlıdır. Her yöntem ayrıca API yanıtı aldıktan sonra bazı veritabanı işlemleri yapıyor. Yani, methodA, methodB ve methodC'un seri yürütmesine ihtiyacım var.

Bunun mantıksal bir şey olduğunu biliyorum, ancak dispatch_semaphore_t veya dispatch_group_wait kullanmak istiyorum ancak NSURLSessionDataTask ile bağlantıda bunları nasıl kullanabileceğime dair hiçbir fikrim yok.

Bununla denedim:

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); 

    [self syncA:^(BOOL success) { 

     NSLog(@"syncA — Completed"); 
     dispatch_semaphore_signal(semaphore); 
    }]; 

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 

    [self syncB:^(BOOL success) { 

     NSLog(@"syncB — Completed"); 
     dispatch_semaphore_signal(semaphore); 
    }]; 

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 

    [self syncC:^(BOOL success) { 

     NSLog(@"syncC — Completed"); 
     dispatch_semaphore_signal(semaphore); 
    }]; 

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 

    NSLog(@"************* END OF SYNC *************"); 

Yukarıdaki kod 1 yönteme yapıştı .. Lütfen bana yardım .. teşekkürler şimdiden !!!

+1

Tüm seri işlemler için NSOperationQueue kullanın. –

+0

Kavramsal olarak, 'NSURLSession' bir işlem kuyruğudur! – NSPratik

+1

bu soruya bakın http://stackoverflow.com/questions/21198404/nsurlsession-with-nsblockoperation-and-queues –

cevap

1

Bunları ana sırada kullanıyor musunuz? Geridönüşüm bloklarını dispatch_semaphore_wait ile aynı sırada çalıştırmayın, çünkü dispatch_semaphore_wait kuyruğu engeller ve geri arama yürütülmez, bu da kilitlenmeye neden olur.