views:

35

answers:

2

I'm looking to create a generic thread in my main delegate that I can use to display a UIActivityIndicator. I have several views that push new views onto the stack. Most of the views are called from the didSelectRow method in the calling view. When they select a row in a UITableView, I want to start the Activity Indicator and push the new view onto the stack. In the new view's viewDidLoad method, I make several calls to a server using Json which can take some time to process. What is the best way to show an Activity indicator from view1, and hide it in a view2 after the processing is complete?

Am I dreaming that I could make 2 methods in my main delegate?

and call [startIndicator] from view1 which would show the Activity Indicator over top of all views.

and call [stopIndicator] from view2 after all processing the viewDidLoad method which would hide the Activity Indicator

Thanks for you help!

A: 

Yes, you could, just make sure to call any UIKit routines on the main thread. You can make it more "thread friendly" by writing the routines like:

-(void)startIndicator {
    if ([NSThread isMainThread] == FALSE) {
       [self performSelectorOnMainThread:@selector(startIndicator) withObject:nil waitUntilDone:NO];
       return;
    }

    /* Actual UIIndicator setup */
}

If you have several threads that may start or stop the indicator, you may also want to add a reference count to the routines, incrementing every time some thread calls "start" and decrementing when they call "stop", then keep the Activitiy Indicator going until a "stop" call reduces the count to zero.

John Franklin
A: 

John,

Thank you for your answer. I've created the methods in the delegate and they are getting called correctly.

I am receiving this compiler warning though. Any advice on getting rid of it?

[myAppDelegate startIndicator];

'-startIndicator' not found in protocol

James
Not an answer. Consider commenting or editing your question.
tc.