在我的情况下,我需要为一些特殊请求添加一些自定义标头。 所以我在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时崩溃了。 崩溃堆栈很奇怪:
我发现崩溃与UIWebView缓存有关。在Cache目录中删除ApplicationCache.db后,它不会崩溃。但是,我找不到修复此崩溃的方法。
我的演示项目显示如下:crash project。按照接下来的两步,您将看到崩溃。
我尝试过的一些方法:
1.replace addValue:forHTTPHeaderField:by setValue:forHTTPHeaderField,它不起作用。
2.通过调用setAllHTTPHeaderFields来重置http标头:它也不起作用。
3.replace nil by @“”,它无效。
4.replace返回NO返回YES,它有效......但是,它没有意义....