ASIDownloadCache не се актуализира с ново съдържание

Следва изходният код за изтегляне и кеширане на изображения от отдалечен сървър с помощта на 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;

какво ми липсва тук?


person uiroshan    schedule 15.03.2012    source източник


Отговори (1)


Най-накрая сам разбрах какво се е случило там. Това е просто глупава грешка и неправилно разбиране на 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];

person uiroshan    schedule 17.03.2012