2011-12-08 16 views
22

ana iş parçacığı üzerinde bir tamamlama bloğu çalıştırmak mümkün mü? ÖrneğinTamamlama bloğundan nasıl bir dönüş değeri alabilirim?

, bir değer olarak döndüren bir yöntemi vardır:

- (int)test 
{ 

    /* here one method is called with completion block with return type void */ 

    [obj somemethodwithcompeltionblock: 
     { 
     /* here I am getting my Int which I want to return */ 
     } 
     ]; 
} 

ama tamamlanması için, bu yöntemin bir sonucu olarak tamamlanması blok içinden tam sayı değerini geri döndürmeye de bakın olamaz blok bir arka plan iş parçacığı üzerinde çalışır.

Bunu nasıl yapabilirim?

+0

buna benzer bir şeydir Yani ... yeni bir iş parçacığı oluşturan bir blok kullanmayın. Bu, değiştiremeyeceğiniz bir çerçeve veya kitaplık bloğu mu? – JoePasq

cevap

29

Sen bloklarla asenkron gelişimi hakkında bazı temel kaçırıyorsun. Herhangi bir yerden, ancak kendi kapsamına gönderilen bir gönderim bloğuna sahip olamazsınız. Satır içi kod yerine her bloğu kendi yöntemi olarak düşünün.

Ne aradığınızı düşünüyorum ...

- (void)testWithHandler:(void(^)(int result))handler 
{ 
    [obj somemethodwithcompeltionblock:^{ 
      int someInt = 10; 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       handler(10); 
      }); 
     } 
     ]; 
} 


- (void)callSite 
{ 
    [self testWithHandler:^(int testResult){ 
     NSLog(@"Result was %d", testResult); 
    }]; 
} 
İlgili konular