2012-10-17 1 views
3

업로드 요청에 대해 UIProgressView의 진행률 막대를 새로 고치려고합니다 (NSURLConnection). 목표는 사진을 업로드하는 동안 진행률 막대를 새로 고치는 것입니다. 여러 검색 후,이 같은 진행 상황 확인하기 위해 내 연결 위임의 didSendBodyData을 사용하여 관리 :NSURLConnection을 사용하여 업로드 할 때 진행 상황을 UIProgressView로 설정하십시오.

- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite 
{ 
    if([self.delegate respondsToSelector:@selector(progressView)]) 
    { 
     self.delegate.progressView.progress = (totalBytesWritten/totalBytesExpectedToWrite) * 100.0; 
    } 
} 

모든 것이 잘 작동하지만 문제는이 방법은 한 번만 호출됩니다입니다 ... 그래서 바 잠시 동안 0 %를 유지하고 중간없이 100 %로 즉시갑니다. 나는 (iOS6 develloper 도구를 사용하여 iPhone에서) 속도가 느린 연결에 연결을 설정하여 속도가 너무 빨라요. 내 업로드가 0 인 경우 잠시 시간을 내고 즉시 100 %로 이동합니다. 이 메서드는 한 번만 호출됩니다 ...

아무쪼록 바랍니다. 고맙습니다 ! 나는 그것을 고치는 방법을 생각할 수 없다 ...

답변

4

은 숫자 형에 관한 C 튜토리얼을 정말로 읽어야한다. 아마도 totalBytesWrittentotalBytesExpectedToWrite은 모두 정수형이므로이를 나누면 잘림이 발생합니다. 즉 결과의 소수 부분이 사라집니다. 결과가 100 %가 아니면 적분 부분은 항상 0이므로 모든 부분이 0이됩니다. 민감한 결과를 얻으려면 변수 중 하나 또는 모두를 float 또는 double으로 캐스팅 해보세요.

또한, UIProgressView는 기본적으로 0과 100 사이의 값을 허용하지 않고 모두 모두 0과 1 사이에, 당신은

self.delegate.progressView.progress = ((float)totalBytesWritten/totalBytesExpectedToWrite); 

를 작성해야하고 그것을 잘 작동합니다.

편집 : 업로드하려는 데이터가 너무 작아서 더 작은 청크로 나눌 필요가 없으므로이 메서드를 한 번만 호출하면됩니다. 많은 양의 데이터를 제공하면 별도의 조각으로 만 전송할 수 있으므로 진행 핸들러 콜백이 여러 번 호출됩니다.

+0

네 고마워, 네, 여기 내 실수를 이해하지만, 문제는 이것이 아닙니다 ... 내 라인은 물론 거짓 이었지만, 문제는 NSLog가 메소드를 호출 할 때' bytesWritten','totalBytesWritten' 및'totalBytesExpectedToWrite'에서 메소드가 한 번만 호출되고 모든 값이'totalBytesWritten'과 동일하므로 진행률이 0에서 100까지만 나타납니다. –

+0

@FabienParseError 아마도 데이터 작은 덩어리로 자르기에는 너무 작습니다. –

+0

감사합니다. @ H2CO3! 그거였다 ! 나는 동시에 10 장의 그림을 올리려고 시도했다. 그리고 지금 진행 막대가 중간체를 표시한다). 그것을 유감스럽게 생각하고, 당신의 도움에 감사드립니다! –

관련 문제