2011-12-08 14 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); 
    }]; 
} 
संबंधित मुद्दे

 संबंधित मुद्दे