iOS stringByEvaluatingJavaScriptFromString - UI冻结

时间:2014-01-27 14:05:22

标签: ios iphone objective-c uiwebview stringbyevaluatingjavascr

在我的iOS应用程序(一种flashCard应用程序)中,我正在使用UIWebView,一旦webview内容加载完成,我需要执行一些UI操作(更改)。
我正在webViewDidFinishLoad检查这件事 当用户点击卡片时,它将翻转并且加载不同的内容。我在此flipAction以及swipeAction中使用以下代码(当用户从​​一张卡片移动到另一张卡片时)以检查:

if (![[myWebView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"])
{
    [self performSelector:@selector(myCustomMethod:) withObject:self afterDelay:3.0];
}

有时候,并非总是如此,我的UI会冻结上述if条件,之后UI将不会进一步响应。该应用必须手动杀死并重新启动。

我是否需要调用stringByEvaluatingJavaScriptFromString:除线程以外的方法? 或者可能是什么原因?

1 个答案:

答案 0 :(得分:1)

您可以尝试后台线程

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
    dispatch_async(queue, ^{
        // async operation
        // Call your method here

                dispatch_sync(dispatch_get_main_queue(), ^{
                    // Update UI here

                });
    });