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 
} 

は個人的に、私はこれを行うための最も簡単な方法は、上記の方法は、そのクラスで一般的なデータのダウンロードやインタフェースを行うために実装するクラスを作成することだと思います。

これは、必要なものを得るのに十分なはずです。

関連する問題