0

[NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {}]用来返回一些 XML 数据,但文件变得如此之大,以至于简单UIActivityIndicator的不再是最好的主意。我搬到了,[[NSURLConnection alloc] initWithRequest: delegate:以便我可以跟踪进度并改用UIProgressViewa

我现在遇到问题,新的委托代码在文件结束之前返回数据导致来自GDataXML 实体的此错误:第 85 行:解析器错误:标记文本第 85 行中的数据过早结束 igured 接受一系列值,并且向上到一定数量的小数位

如果我跑

[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

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

谢谢斯蒂芬

4

1 回答 1

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];
}
于 2013-08-09T14:16:44.043 回答