2011-03-13 189 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