从NSURLConnection收集数据

Sti*_*Sti 1 cocoa-touch nsurlconnection nsdata ios

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

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

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

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

小智 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
}
Run Code Online (Sandbox Code Playgroud)

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

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://web.service/response.json"]];
Run Code Online (Sandbox Code Playgroud)