2014-07-11 18 views
0

루프를 반복하는 동안 UIProgressbar의 진행 상황을 업데이트하는 방법에 대한 명확한 답을 찾을 수 없습니다. :루프 동안 UIProgressBar 진행 업데이트

for (int i=0;i<items.count;i++) { 
    Object *new = [Object new]; 
    new.xxx = @""; 
    new... 
    ... 
    float progress = (i+1)/(float)items.count; 
    progressBar.progress = progress; 
} 
[self save]; 

어떻게하면 별도의 스레드에서 UI를 업데이트 할 수 있습니까?

+0

는 백그라운드 스레드에서 장기 실행 프로세스를 수행하고 주 스레드에서 UI를 업데이트합니다. 이것은 Grand Central Dispatch (GCD)의 완벽한 사용법입니다. – rmaddy

답변

1

배경 스레드에 루프를 실행하고 메인 스레드에서 진행 표시 줄 업데이트 :

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
    for (int i=0;i<items.count;i++) { 
     Object *new = [Object new]; 
     new.xxx = @""; 
     new... 
     ... 
     float progress = (i+1)/(float)items.count; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      progressBar.progress = progress; 
     }); 

    } 
    [self save]; 
});