Статические члены класса.
Если они используются в нескольких местах одним классом, обычно проще держать вещи организованными - и позже найти, где вы все определили - если вы оставите их определенными в классе, который их использует. Определение их на месте затрудняет их поиск и последующее изменение. И я бы выбрал конкретный класс для анонимного пространства имен для более чистого определения и использования класса.
Второй вопрос на самом деле легче ответить. Посмотрите на метод stringWithContentsOfURL: encoding: error:
NSString - он позволяет вам передать URL-адрес в качестве экземпляра NSURL (который можно легко создать из NSString) и возвращает строку с полным содержимым страницу по этому URL-адресу. Например:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
После запуска этого кода googlePage
будет содержать HTML для www.google.com, а error
будет содержать любые ошибки, обнаруженные при выборке. (Вы должны проверить содержимое ошибки
после выборки.)
Другой путь (из UIWebView) немного сложнее, но в основном это та же концепция. Вы' Мне нужно будет вытащить запрос из представления, а затем выполнить выборку, как раньше:
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
РЕДАКТИРОВАТЬ: Однако оба этих метода снижают производительность, поскольку они выполняют запрос дважды. Вы можете обойти это, захватив содержимое из загруженного в данный момент UIWebView, используя его метод stringByEvaluatingJavascriptFromString:
, как таковой:
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
Это захватит текущее HTML-содержимое представления с помощью объектной модели документа, проанализирует JavaScript, а затем передать его вам как NSString * HTML.
Другой способ - сначала выполнить ваш запрос программно, а затем загрузить UIWebView из того, что вы запросили. Допустим, вы взяли второй пример выше, где у вас есть NSString * page
в результате вызова stringWithContentsOfURL: encoding: error:
. Затем вы можете вставить эту строку в веб-представление, используя loadHTMLString: baseURL:
, предполагая, что вы также сохранили запрашиваемый вами NSURL:
[yourWebView loadHTMLString:page baseURL:requestURL];
Я не уверен, однако, будет ли это запускать найденный JavaScript на загружаемой странице (название метода loadHTMLString
несколько двусмысленно, и в документации об этом мало что говорится).
Для получения дополнительной информации:
, если вы хотите извлечь содержимое уже загруженного UIWebView, -stringByEvaluatingJavaScriptFromString. Например:
NSString *html = [webView stringByEvaluatingJavaScriptFromString: @"document.body.innerHTML"];
Читать: -
NSString *html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent"];
NSLog(html);
Для изменения: -
html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent=''"];