繁体   English   中英

NSURLConnection sendAsynchronousRequest和NSURLConnection initWithRequest返回不同的数据

[英]NSURLConnection sendAsynchronousRequest and NSURLConnection initWithRequest return different data

我正在使用[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

有人知道这里出了什么问题吗?

谢谢斯蒂芬

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];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM