ASIDownloadCache не обновляется новым контентом - PullRequest
0 голосов
/ 15 марта 2012

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

В соответствии с приведенным ниже кодом предполагается, что сервер должен проверять наличие нового содержимого каждый раз. Я проверил журналы сервера, и он печатает код состояния 304. Но когда я обновлюсь с последними изображениями, он не будет отображаться с новым изображением. вместо того, чтобы показывать кэшированное изображение. Но в журналах сервера говорится, что он отправляет новое изображение с кодом состояния 200. Чтобы избежать такого поведения, мне нужно удалить приложение и переустановить его.

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
request.timeOutSeconds = kDefaultTimeInterval;
request.validatesSecureCertificate = NO;
[request setDownloadCache:[ASIDownloadCache sharedCache]];
[request setCachePolicy:ASIAskServerIfModifiedCachePolicy];
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
[request setSecondsToCache:kSecondsToCache];
[request startSynchronous];

if (![request didUseCachedResponse]) {
    NSLog(@"  Cache miss.  Loading resource %@", location);
} else {
    NSLog(@"  Cache hit!");
}
NSLog(@" ***  image data size: %u bytes", [request.responseData length]);
return ([request error]) ? nil : request.responseData;

что мне здесь не хватает?

1 Ответ

0 голосов
/ 17 марта 2012

Наконец-то я разобрался, что там произошло.Это просто глупая ошибка и неправильное понимание API.

По секундам для кеширования я думал, что это для сохранения кеша до установки значения.Но, похоже, это не так.Согласно документации

Set secondsToCache on the request to override any expiry date for the content
set by the server, and store this response in the cache until secondsToCache 
seconds have elapsed

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

В качестве исправления я только что удалил строку [request setSecondsToCache:kSecondsToCache];

...