我有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];
答案 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错误就消失了。因此,如果您没有明显的多线程或多实例问题,那么寻找其他东西可能是值得的。