2011-10-25 29 views
3

我想获取JSON并在互联网可用时将其缓存,如果不存在则使用缓存。我使用了这段代码,但当我离线时,请求的responseString始终为空。 (文件说,它只能如果服务器返回200或300回应离线使用ASIDownloadCache

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setDownloadCache:[ASIDownloadCache sharedCache]]; 

任何想法,以获得高速缓存的数据时,有没有网络连接

谢谢

回答

2

您可以使用此功能。?:

[[ASIDownloadCache sharedCache] pathToCachedResponseDataForURL:] 

为了获取路径到磁盘上的缓存,如果没有缓存数据,它将返回nil

+0

谢谢!它很棒! – Matthew

+0

非常适合在服务器关闭的情况下返回失效的缓存数据作为最后的手段 –

2

您需要确保该请求被永久显式缓存(跨应用程序会话)。要设置这样的:

[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 

一旦请求被高速缓存,它会立即只要你下载缓存的政策回落到缓存中,当远程连接失败返回缓存数据。应该已经将[ASIDownloadCache sharedCache]设置为默认缓存策略,该策略足够好地处理这种情况。

+0

如果服务器脱机且数据具有* expires:*标头,这还不够。该请求将返回nil。 –

+0

现在人们根本不应该使用'ASIHTTPRequest'。切换到类似[AFNetworking'](https://github.com/AFNetworking/AFNetworking)。 – darvids0n

+0

@ darvids0n AFnetworking是否支持自动缓存? –