2011-03-13 192 views
1

我正在加载一个XML file,其中包含大约600个小数据集,大约有10,000行。数据被用作地图上的注释点。我正在使用TouchXML库来处理XML。这里是我的代码:将XML文件下载这段代码为什么会崩溃?

NSData *XMLData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://skidmoreapps.com/darksky/fetch_info.php"]]; 
CXMLDocument *doc = [[[CXMLDocument alloc] initWithData:XMLData options:0 error:nil] autorelease]; 
NSArray *nodes = [doc nodesForXPath:@"//site" error:nil]; 

for (CXMLElement *node in nodes) 
{ 
    ObservationSite *site = [ObservationSite mapAnnotation]; 
    [site setCoordinate:CLLocationCoordinate2DMake([[[[node elementsForName:@"lat"] objectAtIndex:0] stringValue] floatValue], [[[[node elementsForName:@"lng"] objectAtIndex:0] stringValue] floatValue])]; 
    [site setTitle:[[[node elementsForName:@"name"] objectAtIndex:0] stringValue]]; 
    [site setAddress:[[[node elementsForName:@"address"] objectAtIndex:0] stringValue]]; 
    [site setUrl:[[[node elementsForName:@"name_l"] objectAtIndex:0] stringValue]]; 
    [site setAffiliation:[[[node elementsForName:@"affil"] objectAtIndex:0] stringValue]]; 
    [site setAffiliationUrl:[[[node elementsForName:@"affil_l"] objectAtIndex:0] stringValue]]; 
    [site setOwner:[[[node elementsForName:@"owner"] objectAtIndex:0] stringValue]]; 
    [site setFee:[[[node elementsForName:@"fee"] objectAtIndex:0] stringValue]]; 
    [site setAccess:[[[node elementsForName:@"access"] objectAtIndex:0] stringValue]]; 
    [site setSky:[[[node elementsForName:@"sky"] objectAtIndex:0] stringValue]]; 
    [site setWeatherUrl:[[[node elementsForName:@"wx_l"] objectAtIndex:0] stringValue]]; 
    [site setPads:[[[node elementsForName:@"pads"] objectAtIndex:0] stringValue]]; 
    [site setParking:[[[node elementsForName:@"parking"] objectAtIndex:0] stringValue]]; 
    [site setRestrooms:[[[node elementsForName:@"b_rooms"] objectAtIndex:0] stringValue]]; 
    [site setSleep:[[[node elementsForName:@"sleep"] objectAtIndex:0] stringValue]]; 
    [site setNotes:[[[node elementsForName:@"notes"] objectAtIndex:0] stringValue]]; 

    [map addAnnotation:site]; 
} 

后,它崩溃,出现此错误:

+1

什么是抛出的实际异常?让它完全崩溃在断点之外。它应该说'对象确实响应了选择器'或其他东西。 – 2011-03-13 20:40:12

+0

这条线看起来像是从先前的迭代节点实现中遗留下来的: CXMLElement * node = [nodes objectAtIndex:i]; – kennbrodhagen 2011-03-13 20:47:24

+0

Squeegy,我没有设置任何断点,所以我猜TouchXML有断点?我如何摆脱它们? – 2011-03-13 20:56:48

回答

2

从截图中我可以看到,有一个mutateError发生的历史。如果你修改你正在枚举的东西,这可能发生在快速枚举过程中。在快速枚举正在运行的同时,是否会发生什么情况会修改[self children]集合?例如,是否有多个线程处理事务?

如果您继续调试程序并允许异常完全抛出,您在控制台上看到了什么?

顺便说一下,您的.php脚本似乎正在返回一个无效的XML文档 - 有些字符不是有效的UTF8,就我的浏览器而言。也许不是问题,但值得修复和排除。

+0

不,只有一个线程。从XML文件中提取的值不会被修改,除了上面显示的stringValue调用。 – 2011-03-13 21:49:50

+0

问题在于它不是有效的UTF-8。非常感谢! – 2011-03-13 22:07:25

+0

啊,太棒了! :) – occulus 2011-03-13 22:08:19