加载特殊网址请求时,UIWebView崩溃了

时间:2014-12-15 06:14:54

标签: ios uiwebview crash uiwebviewdelegate

在我的情况下,我需要为一些特殊请求添加一些自定义标头。 所以我在UIWebViewDelegate中添加以下代码:

- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
 navigationType:(UIWebViewNavigationType)navigationType
{
NSString *host = [[request URL] host];
static NSString *testTag = @"test_tag";

if ([host hasSuffix:@"yixin.im"]) // add special tag for special url(base on host)
{
    if ([[request allHTTPHeaderFields] objectForKey:testTag] == nil)
    {
        NSMutableURLRequest *aRequest = [request mutableCopy];
        [aRequest addValue:@"1" forHTTPHeaderField:testTag];
        [webView loadRequest:aRequest];            
        return NO;
    }
}
else //remove special tag for other url
{
    if ([[request allHTTPHeaderFields] objectForKey:testTag])
    {
        NSMutableURLRequest *aRequest = [request mutableCopy];
        [aRequest addValue:nil forHTTPHeaderField:testTag];
        [webView loadRequest:aRequest];
        return NO;
    }
}
return YES;

}

然而,它在第二次加载相同的URL时崩溃了。 崩溃堆栈很奇怪:

crash stack

我发现崩溃与UIWebView缓存有关。在Cache目录中删除ApplicationCache.db后,它不会崩溃。但是,我找不到修复此崩溃的方法。

我的演示项目显示如下:crash project。按照接下来的两步,您将看到崩溃。

  1. 启动应用,您将看到一个网页。
  2. 然后重新启动应用程序,它崩溃了。
  3. 我尝试过的一些方法:

    1.replace addValue:forHTTPHeaderField:by setValue:forHTTPHeaderField,它不起作用。

    2.通过调用setAllHTTPHeaderFields来重置http标头:它也不起作用。

    3.replace nil by @“”,它无效。

    4.replace返回NO返回YES,它有效......但是,它没有意义....

0 个答案:

没有答案