2012-03-01 12 views
0

ASIHTTPRequest Cache機能を使用してキャッシュ結果を取得できません。私はドキュメンテーションの指示に従った。私がインターネットにアクセスすると、以下は完全に機能します。その時点で、飛行機モードをオンにして、マルチタスクからアプリを終了します。私はこれを行うとき、私はrequestFinishedへの非同期呼び出しを取得しません。私はキャッシュポリシーの束を試しましたが、それはそれを行うように見えません。誰にもアイデアはありますか?ASIHTTPRequest Caching Not working

目的:インターネットに接続されていない状態でキャッシュされた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

答えて

3

これは、ASIHTTPRequestがデータの有効期限が切れたと考えているようです。あなたは、有効期限の設定を上書きし、それがどのように動作するか確認しようとすることができます:

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

もちろん、キャッシュの有効期限を使用するには十分な理由があるとして、これは、最適ではありません。しかしそれはあなたを正しい道で導くかもしれません。それが本当に有効期限の問題であれば、サーバー側からのキャッシュ設定が適合しているかどうかを確認することができます。

良いキャッシュポリシーには、1つは、ドキュメントに記載することができる。

[request setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];