我的progressView并不令人耳目一新

时间:2011-03-25 11:10:41

标签: iphone sqlite uiprogressview

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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