2012-04-20 8 views
5

Używam NSURLRequest z CachePolicy, aby pobrać plik plist w NSData. Gdy zmieniam zawartość mojego plist, moja aplikacja ignoruje to i nadal prezentuje zawartość, która jest w pamięci podręcznej. Jak długo trwa pamięć podręczna? Jeśli tak, to czy istnieje opcja określenia czasu przechowywania danych w pamięci podręcznej? Czy istnieje sposób sprawdzenia NSURLRequest, czy dane na serwerze są nowsze niż pamięć podręczna ładowania danych z serwera lub jeśli jest równa pamięci podręcznej korzystać z pamięci podręcznej?Zasady dotyczące pamięci podręcznej NSURLRequest

Odpowiedz

2

Zobacz Controlling Response Caching w URLLoadingSystem docs.

Możesz dodać swoją datę w metodach delegata

-(NSCachedURLResponse *)connection:(NSURLConnection *)connection 
       willCacheResponse:(NSCachedURLResponse *)cachedResponse 

Znacznie łatwiej z systemem buforowania jest ASIHTTPRequest. Polecam użyć tego systemu ładowania adresu URL.

Z Dokumenty jabłek:

Przykład listingu 6 zapobiega buforowanie https odpowiedzi. To dodaje również bieżącą datę do słownika informacji użytkownika dla odpowiedzi , które są buforowane.

-(NSCachedURLResponse *)connection:(NSURLConnection *)connection 
       willCacheResponse:(NSCachedURLResponse *)cachedResponse 
{ 
    NSCachedURLResponse *newCachedResponse = cachedResponse; 

    if ([[[[cachedResponse response] URL] scheme] isEqual:@"https"]) { 
     newCachedResponse = nil; 
    } else { 
     NSDictionary *newUserInfo; 
     newUserInfo = [NSDictionary dictionaryWithObject:[NSCalendarDate date] 
               forKey:@"Cached Date"]; 
     newCachedResponse = [[[NSCachedURLResponse alloc] 
           initWithResponse:[cachedResponse response] 
            data:[cachedResponse data] 
            userInfo:newUserInfo 
            storagePolicy:[cachedResponse storagePolicy]] 
          autorelease]; 
    } 
    return newCachedResponse; 
} 
+0

Dzięki. Ustawiłem teraz na zero. Ale jak sprawić, aby pamięć podręczna pozostała przez pewien czas lub sprawdzić, czy dostępne są nowsze dane z serwera? – halloway4b

+0

zaktualizowałem moją odpowiedź –

+0

iOS 6.1 SDK dokumentacja stwierdza co następuje: połączenia: willCacheResponse: Wysłane przed połączenie przechowuje w pamięci podręcznej odpowiedź w pamięci podręcznej, aby dać pełnomocnikowi możliwość jej zmiany. (wymagane) (Dostępne w systemie iOS 2.0 do iOS 4.3.) – cynistersix