How can I retrieve a return value from a completion block?
14,893
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);
}];
}
Related videos on Youtube
Author by
Elegant Microweb
Updated on June 07, 2020Comments
-
Elegant Microweb almost 4 years
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?
-
fearmint over 12 yearsSo... don't use a block that creates a new thread. Is this a framework or library block that you can't modify?
-