我正在使用[NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {}]
来返回一些XML数据,但文件太大了,简单的UIActivityIndicator
不再是最好的主意了。我已移至[[NSURLConnection alloc] initWithRequest: delegate:
,以便我可以跟踪进度并使用UIProgressView
代替
我现在遇到问题,新的委托代码在文件结束前返回数据导致GDataXML
出现此错误
实体:第85行:解析器错误:标记文本行85中数据的过早结束
配置为接受一系列值,以及最多一定数量的小数位
如果我跑
[NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSLog(@"%i", [data length]);
}];
它写入控制台:17514
当我改为运行时
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES];
我得到了不同长度的回复。我的代表方法是:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"%i", [data length]);
}
3802打印到控制台,然后是13712
有人知道这里出了什么问题吗?
由于 斯蒂芬
答案 0 :(得分:3)
在connection:didReceiveData:
中,您必须将结果附加到NSMutableData
实例以收集整个响应。在NSURLConnectionDelegate
文档中,关于此方法的data
参数:
新提供的数据。委托应该连接内容 传递的每个数据对象,以构建URL的完整数据 负荷。
举个例子:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.mutableResponseData appendData:data];
}
连接完成加载数据后,解析数据,例如:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[self parse:self.mutableResponseData];
}