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

时间:2013-08-09 13:50:07

标签: iphone objective-c ipad nsurlconnection

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

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

由于 斯蒂芬

1 个答案:

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