iOS8上的NSXMLParser - NSXMLParser不支持可重入解析

时间:2014-09-03 10:33:32

标签: ios objective-c ios8 nsxmlparser nsxmlparserdelegate

我有NSXMLParser问题,我尝试了iOS8 NSXMLParser crash这个主题,但我真的没有得到解决方案。

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

3 个答案:

答案 0 :(得分:15)

您可以尝试以下代码:

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

答案 1 :(得分:2)

我遇到了同样的错误,结果发现问题是由于在func parserDidEndDocument(parser: NSXMLParser)中调用了一个不在主线程上运行的UI更新。强制该函数中的UI更新在主队列上运行后,问题得以解决。

答案 2 :(得分:0)

我最近遇到了同样的问题,但事实证明我在我的一个代表中遇到了异常(KVO问题),并且一旦我修复了reentracy错误就消失了。因此,如果您没有明显的多线程或多实例问题,那么寻找其他东西可能是值得的。