¿Cómo puedo recuperar un valor de retorno de un bloque de finalización?

¿Es posible ejecutar un bloque de finalización en el hilo principal?

Por ejemplo, tengo un método que devuelve un valor:

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

pero no puedo ver cómo devolver el valor entero desde dentro del bloque de finalización como resultado de este método, porque el bloque de finalización se ejecuta en una cadena de fondo.

¿Cómo puedo hacer esto?

Te faltan algunos conceptos básicos sobre el desarrollo asincrónico con bloques. No puede tener un retorno de bloque enviado desde cualquier lugar, excepto su propio scope. Piense en cada bloque como su propio método, en lugar de código en línea.

Creo que lo que estás buscando es algo similar a esto …

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