2015-04-22 64 views
1

我正在研究iOS应用程序,用户可以从收件箱列表中选择一封电子邮件,并在下一页(有一个UIWebView来提供内容)中查看它。UIWebView第二次卡住

以下是我正在观察的内容:第一次选择电子邮件时,它显示在第二页上的速度非常快。但是,如果我导航回来并选择再次查看电子邮件,则需要很长时间才能在第二页上调用webViewDidFinishLoad:

只见控制台以下消息:

void SendDelegateMessage(NSInvocation *): 
delegate (webView:didFinishLoadForFrame:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode 

一旦被印刷该消息时,内容被呈现在web视图。

我不明白的是,这总是发生在第二次使用webview来显示HTML内容。没有本地缓存​​文件/资源​​,并且没有网络问题。

请指点我该在哪里看这个问题。谢谢!

---- ----更新

在我随机尝试,我发现删除这一行:

self.webView.delegate = self;

会让问题消失了。这让我感到更加困惑。为什么让自己成为代表可能会导致这样的问题?

----更新2 ----

我发现罪魁祸首是一个扁平化的HTML方法我称之为后的WebView加载HTML。 如果我删除NSHTMLTextDocumentType这一切都很好,但我不明白为什么:

+ (NSString *) stripHtmlSchema: (NSString *)htmlString 
{ 
    NSString *flatString = [[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] 
                  options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 
                     NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]} 
               documentAttributes:nil 
                   error:nil] string]; 
    return flatString; 
} 

----最后更新----

想通了这个问题。 [NSAttributedString alloc] initWithData执行时间太长,所以阻止了一切。

+0

你在你的webview中使用任何javascript代码? 该文档声明: “对于每个顶级入口点,JavaScript执行时间限制为10秒。如果脚本执行超过10秒,则Web视图停止执行脚本” –

+0

@MathiasKogler“感谢您的答复。没有JavaScript执行。我不明白它如何能第一次工作。 –

回答

0

找出问题所在。 [NSAttributedString alloc] initWithData执行时间太长,所以阻止了一切。