Reputation: 3298
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.
Upvotes: 7
Views: 12287
Reputation: 9098
dispatch_async(jsonQueue, ^{
[self doSomeJSON];
dispatch_async(dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"modaltomenu" sender:self];
//Finished with async block
});
});
Upvotes: 7
Reputation: 5539
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];
});
});
Upvotes: 27