How can I retrieve a return value from a completion block?
Is it possible to run a completion block on the main thread?
For example, I have one method which returns a value:
- (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 */
}
];
}
but I can't see how to return the integer value from within the completion block as the result of this method, because the completion block runs on a background thread.
How can I do this?
You're missing some basics about asynchronous development with blocks. You can't have a dispatched block return from anywhere but its own scope. Think of each block as its own method, instead of inline code.
I think what you're looking for is something similar to this...
- (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);
}];
}