2014-09-03 42 views
2

我有NSXMLParser問題,並且我嘗試了iOS8 NSXMLParser crash這個主題,但我真的沒有得到解決方案。iOS8上的NSXMLParser - NSXMLParser不支持可重入解析

我正在創建另一個NXSMLParser委託並將其委託設置在另一個類中。

請問您可以一步一步告訴我該準確做什麼?我感到很困惑。

這是我的代碼;

碼的這些行是STXMLParser

STXMLParser2 *stXMLParser2 = [[STXMLParser2 alloc]init];  

    stXMLParser2.xmlParser = [[NSXMLParser alloc] initWithData:responseLoader.xmlData]; 
    [stXMLParser2.xmlParser setDelegate:self]; 
    [stXMLParser2.xmlParser setShouldResolveExternalEntities:YES]; 
    [stXMLParser2.xmlParser parse]; 
+0

我想我有類似的問題,但我使用的是Swift。在我調用.parse()的時候語法分析器崩潰了 – 2014-09-05 23:55:36

回答

14

裏面你可以試試這個代碼:

dispatch_queue_t reentrantAvoidanceQueue = dispatch_queue_create("reentrantAvoidanceQueue", DISPATCH_QUEUE_SERIAL); 
    dispatch_async(reentrantAvoidanceQueue, ^{ 
     STXMLParser2 *stXMLParser2 = [[STXMLParser2 alloc]init];  
     stXMLParser2.xmlParser = [[NSXMLParser alloc] initWithData:responseLoader.xmlData]; 
     [stXMLParser2.xmlParser setDelegate:self]; 
     [stXMLParser2.xmlParser setShouldResolveExternalEntities:YES]; 
     [stXMLParser2.xmlParser parse]; 
    }); 
    dispatch_sync(reentrantAvoidanceQueue, ^{ }); 
+0

對我來說還在崩潰...... – 2014-09-26 06:45:52

+0

對我來說,這很神奇! – 2014-10-08 13:14:45

+1

@JackSolomon如果您正在使用一堆不同的'NSXMLParser'實例,則需要修復在另一個「NSXMLParser」的委託回調中針對「NSXMLParser」調用'parse'的情況。這個答案並沒有解決我的問題,直到我想到了一點點。 – mbm29414 2014-10-25 13:27:00

0

我最近遇到了同樣的問題,但事實證明,我的一個有一個例外我的代表(KVO問題),並且一旦我確定再犯錯誤消失了。因此,如果您沒有明顯的多線程或多實例問題,可能需要尋找其他的東西。

2

我得到了同樣的錯誤,結果發現問題是由於調用func parserDidEndDocument(parser: NSXMLParser)中的UI更新而導致主線程無法運行。強制該函數中的UI更新在主隊列上運行後,問題已解決。