Я создаю приложение для 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();
}