webViewDidFinishLoad 메서드가 전체 애플리케이션을 차단하여 모든 버튼을 터치 할 수없는 것으로 나타났습니다.webViewDidFinishLoad 블록 메인 스레드
결과 페이지를 구문 분석해야 UIWebView를 처리하는 데 많은 시간이 걸릴 수 있습니다. 그렇다면 전체 응용 프로그램을 차단하지 않고 구문 분석하는 가장 좋은 방법은 무엇입니까? 다른 스레드를 만들 수 있습니까? GCD를 사용하여 백그라운드에서
webViewDidFinishLoad 메서드가 전체 애플리케이션을 차단하여 모든 버튼을 터치 할 수없는 것으로 나타났습니다.webViewDidFinishLoad 블록 메인 스레드
결과 페이지를 구문 분석해야 UIWebView를 처리하는 데 많은 시간이 걸릴 수 있습니다. 그렇다면 전체 응용 프로그램을 차단하지 않고 구문 분석하는 가장 좋은 방법은 무엇입니까? 다른 스레드를 만들 수 있습니까? GCD를 사용하여 백그라운드에서
구문 분석을 :
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// Get the contents from the UIWebView (in the main thread)
NSString *data = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.textContent"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Parse the data here
dispatch_sync(dispatch_get_main_queue(), ^{
// Update the UI here
});
});
}
그것은 -webViewDidFinishLoad
정상은 주 스레드에서 호출 할 수 있습니다. 당신이해야 할 일은 html을 가져 와서 다른 큐로 파싱하여 구문 분석 작업을 수행하는 것입니다.
백그라운드에서 stringByEvaluatingJavaScriptFromString을 호출 할 수 있습니까? 제 경우에는 그것이 오랜 시간이 걸리는 과정이며, 5 초 이상 걸리는 경우, 그것을 죽이고 다른 것을하고 싶습니다. –
bool _WebTryThreadLock (bool), 0x1e507400 : 주 스레드 또는 웹 스레드 이외의 스레드에서 웹 잠금을 얻으려고 시도했습니다. 이것은 보조 스레드에서 UIKit을 호출 한 결과 일 수 있습니다. 지금 충돌 중 ... – FrozenHeart
@NikitaTrophimov 메인 스레드에서 내용을 가져온 다음 백그라운드에서 해당 내용을 구문 분석합니다. 내 편집을 참조하십시오. – trojanfoe
다음 작업을 수행합니다. http://pastie.org/7902111 같은 오류 – FrozenHeart