从NSURLConnection收集数据

时间:2012-09-03 13:30:40

标签: ios cocoa-touch nsurlconnection nsdata

我有最糟糕的互联网连接atm,很抱歉,如果之前有人问过这个..

我有一个NSURLConnection来获取一些json数据。到目前为止,使用委托方法didReceiveData:(NSData *)数据来保存接收到的数据非常合适。我正在同时从至少七个不同的页面下载数据。今天,在更新json-pages以包含更多数据之后,NSData对象似乎已损坏。我最近被告知这个代表不会返回整个数据,从而破坏我的信息。

是否还有像didFinish这样的另一个委托,它还会返回完整的完整对象?或者我自己必须这样做,比如合并两个NSData?

抱歉愚蠢,语法错误专用于iPhone自动更正。

1 个答案:

答案 0 :(得分:7)

您必须永远不会依赖didReceiveData:返回完整数据,因为打破一天。您必须在NSMutableData中收集数据块:

NSMutableData *d = [[NSMutableData alloc] init];

- (void)connection:(NSURLConnection *)c didReceiveData:(NSData *)data
{
    [d appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)conn
{
    // 'd' now contains the entire data
}

如果它对您不方便,您可以避免使用NSURLConnection并使用后台线程使用以下方法获取数据:

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://web.service/response.json"]];