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), и как только я исправил ошибку повторного входа, исчезла. Так что, возможно, стоит поискать что-то еще, если у вас нет явной проблемы многопоточности или множественности.

Другие вопросы по тегам