UIWebView第二次停留

时间:2015-04-22 22:35:44

标签: ios objective-c uiwebview

我正在开发一个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执行时间太长,因此阻止了所有内容。

1 个答案:

答案 0 :(得分:0)

找出问题所在。 [NSAttributedString alloc] initWithData执行时间太长,因此阻止了所有内容。