这段代码为什么会崩溃?
我正在加载一个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];
}
后,它崩溃,出现此错误:
从截图中我可以看到,有一个mutateError
发生的历史。如果你修改你正在枚举的东西,这可能发生在快速枚举过程中。在快速枚举正在运行的同时,是否会发生什么情况会修改[self children]
集合?例如,是否有多个线程处理事务?
如果您继续调试程序并允许异常完全抛出,您在控制台上看到了什么?
顺便说一下,您的.php脚本似乎正在返回一个无效的XML文档 - 有些字符不是有效的UTF8,就我的浏览器而言。也许不是问题,但值得修复和排除。
不,只有一个线程。从XML文件中提取的值不会被修改,除了上面显示的stringValue调用。 – 2011-03-13 21:49:50
问题在于它不是有效的UTF-8。非常感谢! – 2011-03-13 22:07:25
啊,太棒了! :) – occulus 2011-03-13 22:08:19
什么是抛出的实际异常?让它完全崩溃在断点之外。它应该说'对象确实响应了选择器'或其他东西。 – 2011-03-13 20:40:12
这条线看起来像是从先前的迭代节点实现中遗留下来的: CXMLElement * node = [nodes objectAtIndex:i]; – kennbrodhagen 2011-03-13 20:47:24
Squeegy,我没有设置任何断点,所以我猜TouchXML有断点?我如何摆脱它们? – 2011-03-13 20:56:48