ASIHTTPRequest Кэширование не работает - PullRequest
0 голосов
/ 01 марта 2012

Я не получаю кэшированные результаты, используя функциональность ASIHTTPRequest Cache. Я следовал указаниям из документации. Когда у меня есть доступ в интернет, ниже работает отлично. В этот момент я включу режим полета и закрою приложение от многозадачности. Когда я делаю это, я не получаю асинхронный вызов requestFinished. Я перепробовал несколько политик кэширования, но, похоже, этого не происходит. У кого-нибудь есть какие-либо идеи?

Цель: получить кэшированный ответ 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);
}

1 Ответ

3 голосов
/ 01 марта 2012

Похоже, что ASIHTTPRequest считает, что ваши данные просрочены. Вы можете попробовать изменить настройки истечения срока действия и посмотреть, как это работает:

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

Конечно, это не оптимально, так как есть веские причины использовать срок действия кэша. Однако это может привести вас на правильный путь. Если это действительно проблема с истечением срока действия, возможно, вы можете убедиться, что настройки кэша со стороны сервера адаптированы.

Хорошая политика кэширования может быть такой, как указано в документации:

[request setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];
...