Skip to main content

Calling depending Web Services + dispatch_group_t in iOS

What is the best approach to call the web services in a chain?

Create a dispatch group

    dispatch_group_t serviceGroup;

Call the first function/web service

-(void)callFirstWebService {
    serviceGroup = dispatch_group_create();

//Call 1st web service here, In the completion block, call the second method which you want to perform serially
[self callSecondWebService];


 dispatch_group_notify(serviceGroup,dispatch_get_main_queue(),^{
        // Won't get here until everything has finished        
        NSLog(@"All Tasks finished");
//Reload table or another task which you want to perform when both service finished
        
    });
}


-(void) callSecondWebService{
    dispatch_group_enter(serviceGroup);
//Call 2nd web service and in the completion block, write the below code

        dispatch_group_leave(serviceGroup);
}


//*******************Theoretical Explantion*****************

  1. Create a method where you want to call webservice. Depending on response, you want to call another webservice/method. After completion of all task, you want to perform last task which you write in first method itself (dispatch_group_notify).
  2. Create the dispatch group in first method
  3. In second method(which you want to perform serially), write dispatch_enter and dispatch_leave. It will ensure that the second task completed successfully.
  4. When all the dispatch groups leave, the dispatch group gets notified automatically and block will executes.

Comments

Popular posts from this blog

How to kill/exit iOS application on a button click programmatically

I had been practising below code to kill an iOS application. exit(0); But last week, my application was rejected by app store due to following reason: We found that your app includes a UI control for quitting the app. This is not in compliance with the iOS Human Interface Guidelines, as required by the App Store Review Guidelines . To avoid any such rebuff, suspend the application using following code snippet. UIApplication.shared.perform(#selector(NSXPCConnection.suspend)) Good news is that now my application is passed the  iOS Human Interface Guidelines and live on app store.

Return multiple values from a function in objective C

We can return tuples in swift as follows:- func getData () -> ( Int , Int , Int ) { //...code here return ( hour , minute , second ) } You can't do that in objective-c. Best option is using parameters by reference . Something like this. - ( void ) getHour :( int *) hour minute :( int *) minute second :( int *) second { * hour = 1 ; * minute = 2 ; * second = 3 ; } And use it like this. int a , b , c ; [ self getHour :& a minute :& b second :& c ]; NSLog (@ "%i, %i, %i" , a , b , c );