2013-06-04 2 views
1

백그라운드 스레드에서 json을 구문 분석해야합니다. 이 파서는 또한 대리자 메서드를 사용하여 진행률 막대를 업데이트해야하지만 어떤 이유로 진행률 표시 줄이 업데이트되고 프로세스가 끝납니다. 이 같은 진행률 표시 줄을 업데이트 할IOS - 비동기 호출에서 진행률 표시 줄 업데이트

-(void)downloadStuff 
{ 
    // some other code 
    downloaderController.delegate = self; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
     [downloaderController parseJson]; 
    }); 
} 

과정에서 방법의 parseJson가 대리자를 호출 여러 번 : 내 코드는 다음과

-(void)updateProgressBar 
{ 
     //Is anyone listening 
     if([_delegate respondsToSelector:@selector(updateProgressBar)]) 
     { 
     [_delegate updateProgressBar]; 
     } 
} 

을 그리고 내 updateProgressBar는 다음과 같습니다 :

(void)updateProgressBar 
{ 
    _progressBar.progress =+ 0.05f; 
} 

아무도 내가 여기서 잘못하고있는 것을 설명 할 수 있습니까?

답변

0

updateProgressBar으로 전화하기 전에 주 스레드로 다시 전환하십시오. GCD 또는 performSelector을 사용하면됩니다.

   [self.delegate performSelectorOnMainThread:@selector(updateProgressBar) withObject:nil waitUntilDone:NO]; 
+0

예를 들어 줄 수 있습니까? 무슨 방법을 말하는지 모르겠다. –

+0

완벽. 매력처럼 일했습니다. 감사! –

+1

GCD를 사용하는 중에'performSelectorOnMainThread' 사용자에게 조금 이상합니다. 대신'dispatch_get_main_queue'를 사용하여'dispatch_async'를 사용하는 것이 더 일관성이 있습니다. – rmaddy

관련 문제