2

我在 iOS 6 上遇到了一个大问题。

我需要在应用程序启动时显示一个网页。我为此使用了 loadHTMLString。在 iOS 6 之前的所有东西上,一切都按预期工作,但在 iOS 6 上,它似乎需要大约。2 分钟加载任何不是文本的内容。所有图像等每加载 2 分钟,这使我的页面加载只需大约 8 分钟。这在 iOS 5.1 及更低版本上运行得非常快。

这是我在网站上发现的一个问题,它解释了我的问题,但没有答案:https ://devforums.apple.com/message/724010

我真的需要一个答案。

当我制作一个执行此操作的空应用程序时,一切正常,如果我将它放在一个在启动之前执行某些网络的应用程序中,就会弹出问题。所以这很难隔离,但据我所知 UIWebView,我认为这个问题与 baseURL 有关,但这只是一种感觉。

4

2 回答 2

1

UIWebView 在 iOS 5 和 6 之间略有不同,因为消息

- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

在调用 loadHTMLString:baseURL: 时发送到 iOS 6 中的视图委托,但在 iOS 5 中并非如此。我的委托方法是

- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}

似乎一个空的基本 URL 导致共享应用程序加载失败。由于这是 iOS 6 的新功能,这似乎是罪魁祸首,也许你有类似的东西。在委托方法中检查空的基本 url 解决了我的问题。它不漂亮,但它有效。

- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if ( [@"file:///" isEqualToString:[[request URL] absoluteString]] ) {
        return YES;
    }

    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}
于 2012-10-26T21:28:01.350 回答
0

我不确定为什么这解决了我的问题,但确实如此。

调用 webview 的我的 View 控制器位于静态库中,因为它正在其他应用程序中重复使用。只需将代码从静态库中移出并放入应用程序本身,应用程序就开始运行得更好,并且 Web 视图也能正常运行。iOS 5 和 iOS 6 之间不再有任何区别。

但是通过添加这段代码,它确实产生了巨大的变化:

NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]) {
    [storage deleteCookie:cookie];
}

就像我说的那样,我无法解释为什么将代码移动到应用程序本身而不是将其作为库和上面的代码工作,但我确信它与 webview 如何缓存有关。

于 2013-01-28T14:03:11.430 回答