2017-02-14 7 views
0

Я создаю приложение в Objective-c для IOS, и мне нужно иметь возможность прокручивать кучу веб-страниц и, используя встроенная функция javascript возвращает некоторые значения JSON.Objective-c [For loop] загружает HTML в UIWebview и извлекает данные из функции JavaScript

Я использую страницы в другом месте приложения, и javascript работает по мере необходимости. На этом этапе я сохраняю ответ JSON, но поскольку пользователь не может просматривать каждую страницу, приложение не обязательно будет иметь все значения JSON для проверки.

Раздел ниже - это то, что я использую, чтобы перебирать все страницы, загружать в строку HTML и запускать функцию javascript. Проблема в том, что значения всегда возвращаются пустым.

-(void)webViewDidFinishLoad:(UIWebView *)webView { 
    NSLog(@"finished loading"); 
    NSString *jsonValues = [webView stringByEvaluatingJavaScriptFromString:@"getFields()"]; 
} 

for (int i = 1; i <= shifts; i++) 
    { 
     ontracMultipleWevViewController *RT9909 = [viewControllerDictionary objectForKey:[NSString stringWithFormat:@"Shift %d RT9909", i]]; 
     if (RT9909 && [RT9909.viewControllers count] > 0) { 
      for (ontracRTViewController *r9909 in RT9909.viewControllers) { 

       UIWebView *webView = [[UIWebView alloc] init]; 
       [webView setDelegate: self]; 
       [webView loadHTMLString:r9909.htmlString baseURL:[NSURL URLWithString:r9909.urlToLoad]]; 
       [self webViewDidFinishLoad:webView]; 
       [self.view addSubview:webView]; 

       if([self webViewDidFinishLoad:webView]){ 
        r9909.jsonValues = [webView stringByEvaluatingJavaScriptFromString:@"getFields()"]; 

        if(r9909.jsonValues != nil && ![r9909.jsonValues isEqualToString:@""] && rt9909ShiftCount == 0){ 

        ........rest of code 

Примечание: Я получаю никаких ошибок или NSLogs, чтобы предположить, какие проблемы

+1

Вы называете себя 'webViewDidFinishLoad:'? Не должен ли это делегировать делегат, когда webView выполнил загрузку? – Larme

+0

@ Larme Спасибо за ваш ответ, я забыл добавить этот метод на самом деле. – jampez77

+0

@ Larme Также забыл все о делегате, идя теперь в это. Спасибо – jampez77

ответ

2

Вам нужно отделить колодку

if([self webViewDidFinishLoad:webView]){ 
    r9909.jsonValues = [webView stringByEvaluatingJavaScriptFromString:@"getFields()"]; 

из for-loop & добавить tags своим webviews.


Реализация дополнительной функции делегата

- (void)webViewDidFinishLoad:(UIWebView *)webView; 

из UIWebView & положить в вашем


if(...) { 
     r9909.jsonValues = [webView stringByEvaluatingJavaScriptFromString:@"getFields()"]; 
} 


логики здесь.
Теперь if check будет основан на webview.tag, который вы назначите, создавая веб-просмотры внутри for loop.

+0

Убедитесь, что код вкладки блокирует 4 пробела вместо «' ', отредактировал формат для вас :) –

+1

haha ​​sure @AlbertRenshaw :) – ystack

+0

Спасибо за ваш ответ @yStack Я не уверен, что смогу пойти без' for -loop', так как мне нужно итерации через 'x' число сдвигов – jampez77