1

我有最差的互联网连接自动取款机,如果之前有人问过这个问题,很抱歉..

我有一个 NSURLConnection 用于获取一些 json 数据。到目前为止,使用委托方法 didReceiveData:(NSData*)data 保存接收到的数据非常有效。我同时从至少七个不同的页面下载数据。今天,在更新 json 页面以包含更多数据后,NSData 对象似乎已损坏。最近有人告诉我,这个委托不会返回全部数据,因此会破坏我的信息。

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

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

4

1 回答 1

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"]];
于 2012-09-03T13:35:07.687 回答