2010-11-19 22 views
1

TouchJSON kullanarak JSON verilerini istediğimde alınan veri miktarını belirten bir UIProgressView görüntülemek istiyorum. Alınan verilerin boyutunu dinlemenin bir yolu olup olmadığını merak ediyordum.iOS: TouchJSON & alınan veri boyutu

Ben verileri aşağıdaki kullanarak istiyoruz:

- (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; 
} 

cevap

1

Bir indirme durumu göstergesi çubuğu eklemeyi biraz daha kod uygulaması getirmek zorunda kalacak. Şu anda verileri [NSData dataWithConentsOfURL:...] ile indirdiğinizde. Bunun yerine, verileri indirmek, bir MSMutableData nesnesindeki verileri toplamak ve kullanıcı arayüzünüzü buna göre güncellemek için NSURLConnection nesnesini kullanan bir sınıf oluşturacaksınız. İndirme durumunu belirlemek için ContentLength HTTP üstbilgisini ve - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; güncelleştirmelerini kullanabilmeniz gerekir.

Bununla alakalı yöntemleri şunlardır:

- (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 
} 

Şahsen ben bunu yapmanın en basit yolu Yukarıdaki yöntemler bu sınıf ile jenerik veri indirme ve arayüz yapmak uygulayan bir sınıf oluşturmak için olduğunu düşünüyorum.

İhtiyacınız olanı size ulaştırmak için bu yeterli olacaktır.

İlgili konular