我的代码看起来像
if([[self cache] isEqualToNumber:[[NSNumber alloc] initWithInt:1]])
{
[[NSURLCache sharedURLCache] setDiskCapacity:4 * 1024 * 1024];
[[NSURLCache sharedURLCache] setMemoryCapacity:32 * 1024 * 1024];
[self setRequestObj:[NSURLRequest requestWithURL:loadUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]];
}
else [self setRequestObj:[NSURLRequest requestWithURL:loadUrl cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0]];
我的其他部分不起作用。为什么我的
UIWebView
不忽略我的本地缓存?
每次我访问测试站点时,我的应用程序都不会从原始源加载。他只加载index.html,但仅在第一次访问时加载链接的图像。
我的问题是什么?
NSURLRequestReloadIgnoringLocalCacheData 标志仅影响该请求,而不影响未来的请求。所以这按预期工作。如果你想禁用其他缓存,我知道的唯一方法是实现一个 NSURLProtocol 来拦截 HTTP/HTTPS 请求,以可识别的方式修改它们(例如添加自定义标头),然后重新发送它们。这不适合胆小的人。
您可能最好只清除缓存:如何清除 UIWebView 缓存?
我遇到了同样的问题,我认为这可能是 UIWebView 的错误。因为我改了WKWebView后,NSURLRequestReloadIgnoringLocalCacheData就可以工作了!
很多年后 - 我相信最新的 iOS 有一个错误,现在甚至忽略了 NSURLRequestReloadIgnoringLocalCacheData 的正确一次性使用。我通过向 URL 请求添加额外的字符来解决这个问题,这些字符将被服务器忽略,但这使得每个 URL 请求都是唯一的。
如果
NSURLRequestReloadIgnoringLocalCacheData
似乎不起作用,可能有多种原因导致其行为不符合预期:
NSURLRequestReloadIgnoringLocalCacheData
。它应该在创建 NSURLRequest
对象时设置为缓存策略,如下所示:let request = URLRequest(url: yourURL, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: yourTimeoutInterval)
其他级别的缓存:如果您的请求仍在缓存,则缓存可能发生在不同的级别,例如在网络层或服务器本身。检查这些级别的任何缓存机制并根据需要进行调整。
服务器端缓存控制:即使您指定
NSURLRequestReloadIgnoringLocalCacheData
,服务器仍可能通过Cache-Control
或Expires
等响应标头强制缓存。确保服务器的缓存指令符合您所需的行为。
测试环境:确保您在适用缓存的环境中进行测试。例如,如果您使用本地服务器或流量最小的服务器进行测试,则可能不容易观察到缓存行为。
网络层实现:如果您使用网络库或框架,请确保它不会覆盖您在
NSURLRequest
级别设置的缓存策略。一些网络库有自己的缓存机制,可能会干扰您所需的行为。
清除现有缓存:如果请求存在现有缓存数据,尽管指定了
NSURLRequestReloadIgnoringLocalCacheData
,但仍可能提供服务。在发出请求之前尝试清除缓存,以确保您从干净的状态开始。
通过调查这些潜在问题,您应该能够诊断
NSURLRequestReloadIgnoringLocalCacheData
在您的场景中未按预期工作的原因,并进行必要的调整以使其正常工作。