webViewDidFinishLoad メソッドがアプリケーション全体をブロックしていることに気付いたので、ボタンに触れることさえできません。
UIWebView の結果ページを解析する必要があり、時間がかかる場合があります。では、アプリケーション全体をブロックせずに解析する最善の方法は何でしょうか? ひょっとしたら、別のスレッドを作成しますか?
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 を取得し、それを別のキューにディスパッチして解析操作を行うことです。