2011-12-08 34 views
22

是否可以在主線程上運行完成塊?如何從完成塊中檢索返回值?

例如,我有,它返回一個值的一個方法:

- (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 */ 
     } 
     ]; 
} 

,但我不能看到如何從完成塊作爲該方法的結果中返回整數值,這是因爲完成塊在後臺線程上運行。

我怎樣才能做到這一點?

+0

所以......不要使用創建一個新的線程塊。這是一個你不能修改的框架或庫塊嗎? – JoePasq

回答

29

你錯過了一些關於塊的異步開發的基礎知識。除了自己的範圍之外,您不能從任何地方返回調度塊。將每個塊視爲自己的方法,而不是內聯代碼。

我想你要尋找的是類似這樣的東西...

- (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); 
    }]; 
} 
相關問題