我有最糟糕的互联网连接atm,很抱歉,如果之前有人问过这个..
我有一个NSURLConnection来获取一些json数据。到目前为止,使用委托方法didReceiveData:(NSData *)数据来保存接收到的数据非常合适。我正在同时从至少七个不同的页面下载数据。今天,在更新json-pages以包含更多数据之后,NSData对象似乎已损坏。我最近被告知这个代表不会返回整个数据,从而破坏我的信息。
是否还有像didFinish这样的另一个委托,它还会返回完整的完整对象?或者我自己必须这样做,比如合并两个NSData?
抱歉愚蠢,语法错误专用于iPhone自动更正。
答案 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"]];