2010-11-19 3 views
1

touchJSON을 사용하여 JSON 데이터를 요청할 때받은 데이터 양을 나타내는 UIProgressView를 표시하려고합니다. 수신되는 데이터의 크기를 듣는 방법이 있는지 궁금합니다.iOS : TouchJSON 및 검색된 데이터 크기

나는 데이터를 사용하여 다음 요청 :

- (NSDictionary *)requestData 
{ 
    NSData   *data  = [NSData dataWithContentsOfURL:[NSURL URLWithString:apiURL]]; 
    NSError   *error  = nil; 
    NSDictionary *result  = [[CJSONDeserializer deserializer] deserializeAsDictionary:data error:&error]; 

    if(error != NULL) 
     NSLog(@"Error: %@", error); 

    return result; 
} 

답변

1

당신은 다운로드 상태 표시 줄을 포함하는 좀 더 코드를 도입해야합니다. 현재 [NSData dataWithConentsOfURL:...]으로 데이터를 다운로드합니다. 대신 NSURLConnection 개체를 사용하여 데이터를 다운로드하고 해당 데이터를 MSMutableData 개체에 축적 한 다음 이에 따라 UI를 업데이트하는 클래스를 만듭니다. ContentLength HTTP 헤더와 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; 업데이트를 사용하여 다운로드 상태를 확인할 수 있어야합니다.

여기에 몇 가지 관련 방법은 다음과 같습니다

- (void) startDownload 
{ 
    downloadedData = [[NSMutableData alloc] init]; 
    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; 
} 

- (void)connection:(NSURLConnection *)c didReceiveResponse:(NSURLResponse *)response 
{ 
    totalBytes = [response expectedContentLength]; 
} 

// assume you have an NSMutableData instance variable named downloadedData 
- (void)connection:(NSURLConnection *)c didReceiveData:(NSData *)data 
{ 
    [downloadedData appendData: data]; 
    float proportionSoFar = (float)[downloadedData length]/(float)totalBytes; 
    // update UI with proportionSoFar 
} 

- (void)connection:(NSURLConnection *)c didFailWithError:(NSError *)error 
{ 
    [connection release]; 
    connection = nil; 
    // handle failure 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)c 
{ 
    [connection release]; 
    connection = nil; 
    // handle data upon success 
} 

가 개인적으로, 나는이 작업을 수행하는 가장 간단한 방법은 위의 방법은 그 클래스와 일반 데이터 다운로드와 인터페이스를 할 구현하는 클래스를 만드는 것입니다 생각합니다.

필요한만큼 얻을 수 있어야합니다.