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); }]; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With