how to check an dispatch_async block has finished running

12,191

Solution 1

You should call UI methods on main thread only. Try to dispatch performSegueWithIdentifier: on main queue:

dispatch_async(jsonQueue, ^{
    [self doSomeJSON];
    dispatch_sync(dispatch_get_main_queue(), ^{
        [self performSegueWithIdentifier:@"modaltomenu" sender:self];
    });
});

Solution 2

    dispatch_async(jsonQueue, ^{
        [self doSomeJSON];
        dispatch_async(dispatch_get_main_queue(), ^{
            [self performSegueWithIdentifier:@"modaltomenu" sender:self];
           //Finished with async block

        });
    });
Share:
12,191
jimbob
Author by

jimbob

Updated on August 03, 2022

Comments

  • jimbob
    jimbob over 1 year

    So basically I need to be able to run a segue after a block has finished running. I have a block which does some JSON stuff and I need to know when that has finished running.

    I have a queue which I have called json_queue.

    jsonQueue = dispatch_queue_create("com.jaboston.jsonQueue", NULL);
    

    I then have a dispatch_async block with this syntax:

      dispatch_async(jsonQueue, ^{
      [self doSomeJSON];
      [self performSegueWithIdentifier:@"modaltomenu" sender:self];
      });
    

    It wont let me perform the line: "[self performSegueWithIdentifier:@"modaltomenu" sender:self];"

    Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...

    Where can I check to find out when the thread has done its dirty work so i can call the segue?

    Thankyou lovely people.

    PS: beer and ups and teddy bears and flowers to whoever can help <3.