ASIHTTPRequest缓存不起作用

时间:2012-03-01 11:49:49

标签: ios caching asihttprequest

我没有使用ASIHTTPRequest缓存功能获得缓存结果。我按照文档中的说明进行操作。当我有互联网访问,以下工作完美。此时,我将启用飞行模式并从多任务关闭应用程序。当我这样做时,我没有得到requestFinished的异步调用。我尝试了一堆缓存策略,但似乎没有这样做。有没有人有任何想法?

目标:能够在没有互联网连接的情况下获得缓存的JSON响应(从Internet成功加载一次后)。

- (void)viewDidLoad
{
    if (!networkQueue) {
        networkQueue = [[ASINetworkQueue alloc] init];
    }
    [networkQueue reset];
    [networkQueue setRequestDidFinishSelector:@selector(imageFetchComplete:)];
    [networkQueue setRequestDidFailSelector:@selector(imageFetchFailed:)];
    [networkQueue setShowAccurateProgress:true];
    [networkQueue setDelegate:self];

    //Turn on default caching
    [ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]];

    [self loadData];
    [super viewDidLoad];
}

-(IBAction)loadData
{
    NSURL *url = [NSURL URLWithString:@"http://SOME_JSON_URL"];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setDelegate:self];
    [request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
    [request startAsynchronous];
}

- (void)requestFinished:(ASIHTTPRequest *)request
{
    if ([request didUseCachedResponse])
    {
        NSLog(@"Did use cache!");   
    }

    NSString *responseString = [request responseString];
    NSLog(@"%@", responseString);
}

1 个答案:

答案 0 :(得分:3)

这看起来像ASIHTTPRequest认为您的数据已过期。您可以尝试覆盖到期设置并查看其工作原理:

[[ASIDownloadCache sharedCache] setShouldRespectCacheControlHeaders:NO];
[request setCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy];

当然这不是最佳的,因为有充分的理由使用缓存过期。但是它可能会引导您走上正轨。如果它确实是一个到期问题,也许您可​​以确保服务器端的缓存设置已经过调整。

良好的缓存策略可能是文档中所述的:

[request setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];