2011-03-25 44 views
0

當我的應用程序第一次啓動時,我有一個後臺進程運行的線程和用戶應該看到一個progressView應該顯示正在進行的進度。下面的代碼顯示了我如何我的線和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

您應該只更新主線程中的用戶界面項目。您可能沒有看到進度指示器的任何更改,因爲您正試圖從後臺線程更改它。

一個非常簡單的策略是從後臺線程調用performSelectorOnMainThread來調用一個簡單的方法來更新主線程上的進度條。

例如,在您的addData方法(在後臺線程),您可以撥打:

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

,然後在updateProgressBar方法(這將在主線程上運行),用做進度條更新給定數據:

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