NSXMLParser на iOS8 - NSXMLParser не поддерживает повторный вход
У меня проблема с NSXMLParser, и я попытался iOS8 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];
3 ответа
Вы можете попробовать этот код:
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, ^{ });
Я получал ту же ошибку, и оказалось, что проблема была вызвана обновлением пользовательского интерфейса в func parserDidEndDocument(parser: NSXMLParser)
который не работает в главном потоке. После принудительного запуска обновления пользовательского интерфейса в этой функции в основной очереди проблема была решена.
Недавно я столкнулся с той же проблемой, но оказалось, что у меня было исключение в одном из моих делегатов (проблема с KVO), и как только я исправил ошибку повторного входа, исчезла. Так что, возможно, стоит поискать что-то еще, если у вас нет явной проблемы многопоточности или множественности.