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];

        // 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{
//Call 2nd web service and in the completion block, write the below code


//*******************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.


Popular posts from this blog

Return multiple values from a function in objective C

We can return tuples in swift as follows:-

func getData()->(Int,Int,Int){//...code herereturn( hour, minute, second)}You can't do that in objective-c. Best option is using parameters by reference. Something like this.

Disabling print for Production In Swift Project

You'll need to set up a compiler flag to use the Swift preprocessor - go to the Swift Compiler - Custom Flags section of Build Settings to set up a -D DEBUG flag:

Then in your code you can define a DLog() function and only print your message if the DEBUG flag is set:
func DLog(message: String, function: String = __FUNCTION__) { #if DEBUG     println("\(function): \(message)") #endif }

Collection view inside table view with NO vertical scrolling

UICollectionView inside a UITableViewCell — dynamic height?
Given the following structure: TableViewTableViewCellCollectionViewCollectionViewCellCollectionViewCellCollectionViewCell[...variable number of cells or different cell sizes]
The solution is to tell auto layout to compute first the collectionViewCell sizes, then the collection view contentSize, and use it as the size of your cell. This is the UIView method that "does the magic": -(void)systemLayoutSizeFittingSize:(CGSize)targetSize      withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority            verticalFittingPriority:(UILayoutPriority)verticalFittingPriority

Full code is available here to download.
Thanks to this awesome answer.