2014-09-03 1 views
2

У меня проблема NSXMLParser, и я пробовал iOS8 NSXMLParser crash эту тему, но я действительно не получил решение.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]; 
+0

Я думаю, у меня есть аналогичная проблема, но я использую Свифт. крах синтаксического анализа в то время, когда я звоню .parse() на нем –

ответ

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

Все еще рушится для меня ... –

+0

Для меня это волшебство! –

+1

@JackSolomon Если вы используете кучу разных экземпляров NSXMLParser, вам нужно исправить случай, когда вы вызываете 'parse' для' NSXMLParser' в обратном вызове делегата из другого 'NSXMLParser'. Этот ответ не исправил мою проблему, пока я не понял, что это немного. – mbm29414

0

я столкнулся с той же проблемой в последнее время, но оказалось, что у меня было исключение в одном из моими делегатами (проблема KVO), и однажды я установил, что ошибка в ретрансляции исчезла. Поэтому, возможно, стоит искать что-то еще, если у вас нет очевидной многопоточной или многовекторной проблемы.

2

Я получал ту же ошибку, и выяснилось, что проблема возникла из-за вызова обновления пользовательского интерфейса в func parserDidEndDocument(parser: NSXMLParser), который не запускается в основном потоке. После принудительного обновления пользовательского интерфейса в этой функции в главной очереди проблема была решена.