2011-03-25 5 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]; 
} 

을 나는 다음과 같은 코드를 사용하여 progressView를 업데이트 할 경우 함수는, addData입니다 설정하고 방법을 보여줍니다 - 그러나

progView.progress = 0.1 

을의 progressView는 비록 볼 수 있지만입니다 백그라운드 프로세스는 화면에 나타나지 않는 위 코드를 사용하여 progressView를 업데이트합니다. 백그라운드 프로세스가 실행되는 동안 StartAnimating의 일부 형식을 사용해야합니까?

답변

1

주 스레드에서만 사용자 인터페이스 항목을 업데이트해야합니다. 진행률 표시기가 백그라운드 스레드에서 변경하려고하기 때문에 변경 표시기가 보이지 않을 수도 있습니다.

매우 간단한 방법은 백그라운드 스레드의 performSelectorOnMainThread을 호출하여 주 스레드의 진행률 막대를 업데이트하는 간단한 메서드를 호출하는 것입니다. 당신의 updateProgressBar 방법 (주 스레드에서 실행되는)를 다음

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

그리고를 사용하여 진행률 표시 줄 업데이트를 수행합니다 (백그라운드 스레드에서) 당신의 addData 방법 예를 들어

, 당신은 호출 할 수 있습니다 주어진 데이터 :

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