2012-03-01 109 views
0

我沒有使用ASIHTTPRequest緩存功能獲得緩存結果。我遵循文檔的指示。當我有互聯網接入時,下面的作品完美無缺。此時,我將打開飛行模式並關閉多任務應用程序。當我這樣做時,我不會異步調用requestFinished。我嘗試了一堆緩存策略,但似乎沒有這樣做。有沒有人有任何想法?ASIHTTPRequest緩存不起作用

目標:能夠在沒有互聯網連接的情況下獲得緩存的JSON響應(成功從互聯網加載一次後)。

- (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); 
} 
+0

@JiaYow:事實證明,如果我明確設置到期[請求setSecondsToCache:60 * 60 * 24 * 30],它作品。謝謝。 – Ryan 2012-03-01 14:27:29

回答

3

這看起來像ASIHTTPRequest認爲您的數據已過期。你可以嘗試重寫到期設置,看看它是如何工作的:

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

當然,這不是最優的,因爲有使用高速緩存期滿很好的理由。但它可能會使你走上正軌。如果確實是到期問題,也許你可以確保服務器端的緩存設置被修改。

良好的緩存策略可以在一個文檔中所述:

[request setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];