0

当我的应用程序第一次启动时,我有一个从线程运行的后台进程,用户应该看到一个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?

4

1 回答 1

1

您应该只从主线程更新用户界面项目。您可能看不到进度指示器的任何更改,因为您正试图从后台线程更改它。

一个非常简单的策略是performSelectorOnMainThread从你的后台线程调用一个简单的方法来更新主线程上的进度条。

例如,在您的addData方法中(在后台线程中),您可以调用:

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

然后在您的updateProgressBar方法(将在主线程上运行)中,使用给定数据更新进度条:

- (void)updateProgressBar:(NSNumber *)progressValue {
    progView.progress = [progressValue floatValue];
}
于 2011-03-25T11:16:10.617 回答