2012-03-01 5 views
0

ASIHTTPRequest Cache 기능을 사용하여 캐싱 된 결과가 표시되지 않습니다. 나는 문서에서 지시를 따랐다. 인터넷에 접속하면 다음과 같이 완벽하게 작동합니다. 이 시점에서 비행기 모드를 켜고 멀티 태스킹에서 앱을 종료합니다. 이 작업을 수행 할 때 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

답변

3

이것은 ASIHTTPRequest에서 데이터가 만료되었다고 생각됩니다. 어떻게 작동하는지 당신은 만료 설정을 무시하고 볼 시도 할 수 있습니다 : 캐시 만료를 사용하는 좋은 이유가 있기 때문에 물론

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

이가 최적이 아니다. 그러나 그것은 올바른 방향으로 인도 할 수 있습니다. 실제로 만료 문제 인 경우 서버 측의 캐시 설정이 적용되었는지 확인할 수 있습니다.

좋은 캐시 정책은 하나의 문서에 명시 될 수있다

[request setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy]; 
관련 문제