2013-03-09 4 views
0

나는 아주 기본적인 것을 놓치고 있다고 생각하지만 어쨌든 그것을 위험에 빠뜨릴 것이다. :) for 루프를 사용하여 다른 html을 UIWebView에로드합니다. html 로딩이 끝나면 관련없는 작업을하고 계속 진행하고 싶습니다. 어떤 이유로 든 webViewDidFinishLoad은 for 루프의 프로세스가 끝날 때 한 번만 호출됩니다. htmlArray에 20 개의 객체가 있더라도 길을 찾으려고합니다.for 루프 내부의 메서드는 한 번만 호출됩니까?

창의적인 방법으로 해결할 수 있습니까?

감사

for(int i=0;i<[_htmlArray count];i++) 
     { 
      msg = [_htmlArray objectAtIndex:i]; 
      [_tempWebView loadHTMLString:msg baseURL:nil]; 
     } 
} 

은 ...

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

    [self doSomeStuff:webView]; // <--only called once 

    NSLog(@"didFinish Snip Snap: %@; stillLoading:%@", [[webView request]URL], 
      ([email protected]"NO":@"YES")); 
} 
+0

확실한 _html.count는 20입니까? –

+0

예. 나는 매 매 하나씩 NSLoging하고있다. – Segev

답변

5

나는 일이 무엇 loadHTMLString:baseURL: 여러 번 호출하여, 당신은 단지 당신이 UIWebView 할 것을 요청하는지 덮어 쓰기되는 것을 가정한다. 그래서 마지막 하나가 승리하고 대표는 한 번만 호출됩니다.

물론 UIWebView은 별도의 스레드에서 실행되고 비동기 적으로로드 될 수 있지만 (실제로는 그렇습니다) 이전로드가 이전에 취소 된 for 루프에서 그렇게 빠르게 수행됩니다. 그들은로드 할 수있는 기회를 가지며 마지막 플레이어 만 승리합니다.

0

거의 동시에 여러 개의로드를 호출하는 경우 마지막로드가 완료 될 때까지 webViewDidFinishLoad:이 호출되지 않을 가능성이 높습니다. 또한 마지막 하나만 로딩을 시작합니다.

0

for 루프가 다시로드되기 전에보기로드가 완료되기를 기다리지 않으므로 대부분 마지막 호출 만 실제로 완료 될 기회를 얻고 webViewDidFinishLoad을 호출합니다.

count이라는 인스턴스 변수를 만들고 viewDidLoad의 첫 번째 페이지를로드하십시오. webViewDidFinishLoad에서 인스턴스 변수를 증가시킵니다. count이 20에 도달하면 완료됩니다.

다음 페이지가로드되기 전에 각 페이지가로드되는 방식입니다.

관련 문제