2011-12-08 13 views
22

メインスレッドで完了ブロックを実行することはできますか?例えば補完ブロックから戻り値を取得するにはどうすればよいですか?

、Iは、値を返す一つの方法がある:

- (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); 
    }]; 
} 
関連する問題