iOS 7中NSURLRequest缓存问题

4
在iOS 7中,cachePolicy不起作用,它只是缓存下载的JSON。
//URLRequest
        NSString *url = [NSString stringWithFormat:@"http://www.semhora.com/jsonparser/categories/categories_%d_test.json", _categoriesIndex];
        NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:url]
                                                  cachePolicy:NSURLCacheStorageNotAllowed
                                          timeoutInterval:60.0];

我该如何在iOS 7中禁用缓存?

3个回答

7

我遇到了同样的问题,并验证设置cachePolicy = 0而不是cachePolicy = NSURLCacheStorageNotAllowed可以解决该问题。

这对我来说也没有意义,因为0对应于NSURLCacheStorageAllowed
我们不能只将其设置为0,因为苹果可能会在未来的版本中修复这个问题。
你可以尝试在发起请求之前调用:

[NSURLCache sharedURLCache] removeCachedResponseForRequest:yourRequest]

更新: 经过进一步研究,我发现破坏代码一直在使用错误的枚举。 请查看NSURLRequest.h中的NSURLRequestCachePolicy。这就是你需要的,它可以解释为什么将其设置为0可以解决你的问题。


6

我刚刚使用了:

//URLRequest
        NSString *url = [NSString stringWithFormat:@"http://www.semhora.com/jsonparser/categories/categories_%d_test.json", _categoriesIndex];
        NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:url]
                                                  cachePolicy:0
                                          timeoutInterval:60.0];

现在它能够正常工作了,不过你是否从苹果开发者论坛中得到任何关于为什么会发生这种情况的答案呢?


这个代码块应该阻止还是允许缓存? - David

2
正确的缓存策略枚举为:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:downloadURL cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];

如果你使用的是3G网络,一些运营商即使你在NSMutableURLRequest中禁用了缓存,他们仍然会使用缓存。所以,如果缓存策略不起作用,请将HTTP头字段cache-control设置为no-cache。

[request setValue:@"no-cache" forHTTPHeaderField:@"cache-control"];

5
请注意,在iOS 8.1中,缓存策略“NSURLRequestReloadIgnoringLocalAndRemoteCacheData”仍未实施,正如Foundation框架中的NSURLRequest头文件中所描述的那样。 - Thomas Verbeek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接