i’ve an app that when start control updates and other things. If the app find some updates they will ask user if this updates have to be done. If user select YES i want that a spinner appear on main screen until update finish. But when i tap YES my alert view doesn’t disappear and remain on screen until update is finished.
Is it possible to create a thread that run on the main thread and stop when update in finished?
Thanks
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex==1) {
[self showActivityViewer];
[self downloadControlAndUpdatePoi];
[self downloadControlAndUpdateItinerari];
[self downloadControlAndUpdateArtisti];
[self downloadControlAndUpdateEventi];
[self hideActivityViewer];
NSLog(@"AGGIORNA");
} else {
NSLog(@"NON AGGIORNARE");
return;
}
}
If the methods
are executed synchronously (that means that they return only after having processed completely), so:
is executed only at the very end.
A simple approach to this is scheduling the execution of your methods on the main thread:
so that those methods are executed only after control has returned to the main loop and the UI has been updated.
Otherwise, you could use:
from NSThread, to do more or less the same. In this case I would suggest creating a wrapper method for all of your
dowloadAndUpdate...methods, but keep in mind that you can’t update the UI from a secondary thread.In both cases, you should take some care about synchronizing the
download...operations with the rest of your workflow after removing the alert view.