我正在开发一个iOS应用程序,用户可以从收件箱列表中选择一封电子邮件,并在下一页上查看(有一个用于提供内容的UIWebView)。
以下是我观察的内容:我第一次选择电子邮件时,它很快就出现在第二页上。但是,如果我向后导航并选择再次查看电子邮件,则需要很长时间才能在第二页上调用webViewDidFinishLoad:
。
我在控制台中看到以下消息:
void SendDelegateMessage(NSInvocation *):
delegate (webView:didFinishLoadForFrame:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
打印此消息后,内容将在WebView上呈现。
我不明白的是,这总是在第二次使用webview显示HTML内容时发生。文件/资源没有本地缓存,也没有网络问题。
请指出我应该在哪里查看此问题。谢谢!
----更新----
在我的随机尝试中,我发现删除了这一行:
self.webView.delegate = self;
将使问题消失。这让我感到更加困惑。为什么让自己成为代表可能会导致这样的问题?
----更新2 ----
我发现罪魁祸首是我在webview加载html后调用的flatten 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 :(得分:0)
找出问题所在。 [NSAttributedString alloc] initWithData
执行时间太长,因此阻止了所有内容。