2010-02-15 3 views
24

NSURLConnection을 사용하여 다운로드하는 동안 진행률 표시 줄을 표시하려고합니다. 서버에서 데이터를 가져올 때마다받은 패키지마다 UI를 업데이트 할 수있었습니다. 그러나 문제는 : 얼마나 많은 데이터가 이미 있고 얼마나 많은 데이터가 다운로드되어야 하는지를 어떻게 알 수 있습니까? 아마 바이트로 ... 그리고 그 비율을 얻기 위해 수학을해야합니까?파일을 다운로드 할 때 NSURLConnection의 진행률 막대를 만드는 방법은 무엇입니까?

답변

63

NSURLConnection 대리인의 경우 총 콘텐츠 길이를 확인하려면 다음과 같이 구현하십시오. 서버는이 기능을 지원해야하지만, 대부분 정적 컨텐츠와 함께 잘 작동합니다 :

- (void)connection: (NSURLConnection*) connection didReceiveResponse: (NSHTTPURLResponse*) response 
{ 
    statusCode_ = [response statusCode]; 
    if (statusCode_ == 200) { 
     download_.size = [response expectedContentLength]; 
    } 
} 

그리고 다음과 같이 진행 업데이트 : 내 경우

- (void) connection: (NSURLConnection*) connection didReceiveData: (NSData*) data 
{ 
    [data_ appendData: data]; 
    download_.progress = ((float) [data_ length]/(float) download_.size); 
    // Broadcast a notification with the progress change, or call a delegate 
} 

내가 size이있는 다운로드 인스턴스가를 및 progress 속성. 그들은 관심있는 당사자에게 다운로드 진행 상태 또는 상태 변경을 알리는 글로벌 DownloadManager 개체가 소유합니다.

관련 문제