мой Прогресс не обновляется - PullRequest
0 голосов
/ 25 марта 2011

Когда мое приложение запускается в первый раз, у меня есть фоновый процесс, который запускается из потока, и пользователь должен видеть Прогресс, который должен показать достигнутый прогресс. Приведенный ниже код показывает, как я настраиваю свою ветку и 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];
}

функция addData - это место, где я обновляю progressView, используя следующий код -

progView.progress = 0.1

Тем не менее, progressView виден, но даже если фоновый процесс обновляет ProgressView с использованием приведенного выше кода, он не отображается на экране. Нужно ли использовать какую-либо форму StartAnimating во время фонового процесса?

1 Ответ

1 голос
/ 25 марта 2011

Вы должны обновлять только элементы пользовательского интерфейса из основного потока.Вы, вероятно, не видите каких-либо изменений в индикаторе прогресса, потому что пытаетесь изменить его из фонового потока.

Очень простая стратегия для этого - вызвать performSelectorOnMainThread из фонового потока для вызовапростой метод, который обновляет индикатор выполнения в главном потоке.

Например, в вашем методе addData (в фоновом потоке) вы можете вызвать:

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

И затем вваш метод updateProgressBar (который будет выполняться в главном потоке), выполните обновление индикатора выполнения, используя указанные данные:

- (void)updateProgressBar:(NSNumber *)progressValue {
    progView.progress = [progressValue floatValue];
}
...