iOS8上的NSXMLParser – NSXMLParser不支持可重入语法分析

我有NSXMLParser的问题,我试图iOS8的NSXMLParser崩溃这个话题,但我真的没有得到解决scheme。

我正在创build另一个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]; 

你可以试试这个代码:

 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, ^{ }); 

我得到了同样的错误,事实certificate,这个问题是由于调用func parserDidEndDocument(parser: NSXMLParser)的UI更新,它不会在主线程上运行。 强制该函数中的UI更新在主队列上运行后,问题已解决。

最近我遇到了同样的问题,但事实certificate,我的一个代表(KVO问题)有个例外,一旦我确定重入错误消失了。 所以,如果你没有明显的multithreading或多实例问题,可能还需要寻找其他的东西。