2011-05-07 4 views
0

다운로드 할 때 UIProgresView를 사용하고 다운로드 한 콘텐츠의 비율을 레이블에 표시하고 있습니다.이 기능은 매번 실행됩니다. 진행 값을 표시 할 때 콘솔에 제대로 표시됩니다. 하지만 화면에 표시되지 않고 0 %와 100 %에서만 표시됩니다. ASIHTTP 프레임 워크도 사용하고 있습니다.UIProgressView가 진행 상황을 정확하게 표시하지 않습니다.

도와주세요. 코멘트에서

CODE : 당신이 당신의 주 스레드 나사 고정 것 같은

for (float i=0; i< [topicNew count]; i++) 
{ 
    NSDictionary *new= [topicNew objectAtIndex:i]; 
    NSString *imageName = [[[NSString alloc] initWithFormat:@"%@.%@.%@.png", appDelegate.subject,topicNamed,[new objectForKey:kWordTitleKey]] autorelease]; 
    NSString *imagePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:imageName]; 
    NSData *imageData = [self ParsingImagePath:[new objectForKey:kWordImagePathKey]]; 
    [progressView setProgress:i/[topicNew count]]; 
    [lblpercent setText:[[NSString stringWithFormat:@"%.0f",i/[topicNew count]] stringByAppendingString:@"%"]]; 

... 여기에 더 많은 코드 ...

+0

우리에게 몇 가지 코드를 부여 오른쪽에서 당신을 얻을 희망, 당신이 100 대신 0의 범위는 0에서 일하는 느낌이있어 - 문제가 너무 1, 어쩌면 캐스팅을. –

+0

아니요 0과 1 사이를 사용 중입니다. – Arvind

+0

아니 몸이 알아요! – Arvind

답변

0

것 같습니다. 즉, progressView를 업데이트하고 있지만 for 루프가 끝날 때까지 업데이트 된 변경 사항을 표시하는 mainthread는 결코 for 루프에서 빠져 나오지 않습니다. 그러면 진행률이 100 %로 설정된 것으로 보입니다.

(NSTimer)와 같은 타이머 또는 이미지 파일을 처리하는 배경 스레드를 사용해야합니다. 그럼 당신은 당신이 당신의 진행 상황을 업데이트 할 때 (예를 들어 루프의 끝)

float p = i/[topicNew count]; 
[progressView performSelectorOnMainThread:@selector(setProgress:) 
    withObject:[NSNumber numberWithFloat:p] 
    waitUntilDone:NO]; 

백그라운드 스레드에서 UIProgressView의 인스턴스를 호출하고 progressView에 업데이트 된 진행을 전달해야합니다. UIKit은 스레드로부터 안전하지 않으므로 백그라운드 스레드에서 직접 progressView를 호출하지 않도록하십시오. 메인 스레드에서 호출하거나 performSelectorOnMainThread:withObject:waitUntilDOne: 메서드를 사용하십시오.

직접

관련 문제