我正在使用NSUrlConnection从网页服务中获取一些数据,当我点击网址时会返回JSON数据,但有时网页会出现故障或出现问题。
当网页返回404时,有没有办法在我的iOS应用中使用网址的缓存版本来获取数据?
在浏览器中,如果我去缓存:mysite.com/test.php我可以看到JSON数据,即使页面已关闭,但当我尝试在我的iOS应用程序中使用相同的URL时,我没有得到JSON数据回来了。
是否可能有我不知道的Obj C类或NSUrlConnection的选项?
答案 0 :(得分:1)
NSURLConnection
already uses a cache。默认情况下,它只缓存内存中的响应,您可以通过将其设置为也使用磁盘存储来自定义它:
NSURLCache *result = [[NSURLCache alloc] initWithMemoryCapacity:[(1024*1024*512) diskCapacity:(1024*1024*1024 * 100) diskPath@"Cache.db"]:
[NSURLCache setSharedURLCache:result];
您看到问题中描述的行为的原因是远程Web服务告诉您的客户端不要缓存响应。您可以使用REDbot或Charles等工具进行检查。默认情况下,NSURLRequest
将使用协议的缓存策略和语义,这几乎总是正确的事情。您可以通过更改cachePolicy
的{{1}}属性来指定其他缓存策略。
答案 1 :(得分:0)
经过大量搜索后,我找不到在我的iOS应用中获取网页缓存版本的方法,但我通过查找响应状态代码并使用Google缓存等服务来处理404错误archive.org/web/如果找到404,则获取URL的缓存版本。
可能不是最精致的方式,但在提出请求时我找不到另一种方法来获取网站的缓存版本。