0

When my app starts for the first time, I have a background process which runs off of a thread and the user should see a progressView which should show the progress being made. The code below shows how I am setting up my thread and progressView

//from viewDidLoad
progView.hidden = NO;
progView.progress = 0.0;
[NSThread detachNewThreadSelector:@selector(buildTable) toTarget:self withObject:nil];

-(void)buildTable
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self performSelectorOnMainThread:@selector(addData) withObject:nil waitUntilDone:NO];
[pool release];
}

the function addData is where I update the progressView using the following code -

progView.progress = 0.1

However, the progressView is visible but even though the background process is updating the progressView using the above code it is not appearing so on the screen. Do I need to use some form of StartAnimating while the background process is running?

user616076
  • 3,907
  • 8
  • 38
  • 64

1 Answers1

1

You should only update user interface items from the main thread. You're probably not seeing any change to the progress indicator because you're trying to change it from a background thread.

A very simple strategy to do this is to call performSelectorOnMainThread from your background thread to call a simple method that updates the progress bar on the main thread.

For example, in your addData method (in the background thread) you can call:

[self performSelectorOnMainThread:@selector(updateProgressBar:) withObject:[NSNumber numberWithFloat:newProgressValue] waitUntilDone:false];

And then in your updateProgressBar method (which will run on the main thread), do the progress bar update using the given data:

- (void)updateProgressBar:(NSNumber *)progressValue {
    progView.progress = [progressValue floatValue];
}
occulus
  • 16,959
  • 6
  • 53
  • 76