Каков наилучший подход для разбора XML / «очистки экрана» в iOS? UIWebview или NSXMLParser?

Я создаю приложение для iOS, которое должно получать данные с веб-страницы. Сначала я использовал NSXMLParser initWithContentsOfURL: и проанализировал HTML с делегатом NSXMLParser . Однако такой подход может быстро стать болезненным (если, например, HTML изменился, мне пришлось бы переписать код синтаксического анализа, что может быть неудобно).

Видя, как я загружаю веб-страницу, я взглянул и на UIWebView . Похоже, UIWebView может быть путь. stringByEvaluatingJavaScriptFromString: представляется очень удобным способом извлечения данных и позволяет хранить javascript в отдельном файле, который будет легко редактировать, если HTML-код изменился. Тем не менее, использование UIWebView кажется немного хакерским (поскольку UIWebView является подклассом UIView , он может блокировать основной поток, и в документах говорится, что в JavaScript есть ограничение 10 МБ).

Есть ли у кого-нибудь какие-либо советы относительно анализа XML / HTML до того, как я застряну?

ОБНОВЛЕНИЕ:

Я написал сообщение в блоге о своем решении: Как сделать boost :: make_shared другом моего класса ), я попытался поместить в класс реализации следующее:


friend std::shared_ptr std::make_shared();

Он все равно не скомпилируется. Тогда я помещаю еще один в класс IInterface. Все еще нет радости. Что я здесь не так сделал?

РЕДАКТИРОВАТЬ: полный исходный файл, используемый для компиляции, с «другом» ...

#include 

class IInterface
{    
public:    
    friend std::shared_ptr<IInterface> Create();     
    virtual void Method() = 0;
};

class InterfaceImpl : public IInterface
{    
public:     
    virtual void Method() {}

protected:    
    friend std::shared_ptr<IInterface> Create();     
    InterfaceImpl() {}    
};

std::shared_ptr Create()
{
    std::shared_ptr object = std::make_shared();    
    return object;
}

void main()
{
    std::shared_ptr i = Create();   
}

5
задан Community 23 May 2017 в 12:00
поделиться