当我的应用程序第一次启动时,我有一个后台进程,它运行一个线程,用户应该看到一个progressView,它应该显示正在进行的进度。下面的代码显示了我如何设置我的线程和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?
答案 0 :(得分:1)
您应该只更新主线程中的用户界面项。您可能没有看到进度指示器的任何更改,因为您尝试从后台线程更改它。
执行此操作的一个非常简单的策略是从后台线程调用performSelectorOnMainThread
来调用更新主线程上的进度条的简单方法。
例如,在addData
方法中(在后台线程中),您可以调用:
[self performSelectorOnMainThread:@selector(updateProgressBar:) withObject:[NSNumber numberWithFloat:newProgressValue] waitUntilDone:false];
然后在您的updateProgressBar
方法(将在主线程上运行)中,使用给定数据更新进度条:
- (void)updateProgressBar:(NSNumber *)progressValue {
progView.progress = [progressValue floatValue];
}