iOS:触摸JSON和;检索数据大小

时间:2010-11-19 18:29:12

标签: ios sync touchjson

我想显示一个UIProgressView,指示在我使用touchJSON请求JSON数据时收到的数据量。我想知道是否有办法听取收到的数据的大小。

我使用以下方式请求数据:

- (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 个答案:

答案 0 :(得分: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
}

就个人而言,我认为最简单的方法是创建一个实现上述方法的类来进行通用数据下载和与该类的接口。

这足以满足您的需求。