我只注意到webViewDidFinishLoad方法會阻塞整個應用程序,所以我甚至不能觸摸任何按鈕。webViewDidFinishLoad塊主線程
我需要解析UIWebView的結果頁面,它可能需要很長時間。那麼解析它而不阻塞整個應用程序的最佳方式是什麼?也許創建另一個線程?
我只注意到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秒鐘,我想殺了它並做其他事情。 – 2015-02-08 20:39:19
bool _WebTryThreadLock(bool),0x1e507400:嘗試從主線程或Web線程以外的線程獲取Web鎖。這可能是從輔助線程調用UIKit的結果。現在崩潰... – FrozenHeart 2013-05-13 11:12:48
@NikitaTrophimov獲取主線程中的內容,然後在後臺解析該內容。看我的編輯。 – trojanfoe 2013-05-13 11:14:46
我執行以下操作:http://pastie.org/7902111相同的錯誤 – FrozenHeart 2013-05-13 11:25:01