2012-03-01 3 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]; 
Смежные вопросы