2014-10-08 10 views
16

ist die Beispielfunktion i aufrufen, wenn i-Cache löschen müssen und einen neuen AnrufNSURLCache nicht gespeicherten Antworten in iOS8 löschen

- (void)clearDataFromNSURLCache:(NSString *)urlString 
{ 
    NSURL *requestUrl = [NSURL URLWithString:urlString]; 
    NSURLRequest *dataUrlRequest = [NSURLRequest requestWithURL: requestUrl]; 

    NSURLCache * cache =[NSURLCache sharedURLCache]; 


    NSCachedURLResponse* cacheResponse =[cache cachedResponseForRequest:dataUrlRequest]; 

    if (cacheResponse) { 
     NSString* dataStr = [NSString stringWithUTF8String:[[cacheResponse data] bytes]]; 
     NSLog(@"data str r= %@",dataStr); 
     NSLog(@"url str r= %@",[[[cacheResponse response] URL] absoluteString]); 
     [cache storeCachedResponse:nil forRequest:dataUrlRequest]; 
     [NSURLCache setSharedURLCache:cache]; 
    } 

    [[NSURLCache sharedURLCache] removeCachedResponseForRequest:dataUrlRequest]; 

    //Check if the respnase data has been removed/deleted from cache 
    NSURLRequest *finalRequestUrlRequest = [NSURLRequest requestWithURL:requestUrl]; 
    NSURLCache * finalCache =[NSURLCache sharedURLCache]; 

    NSCachedURLResponse* finalcacheResponse =[finalCache cachedResponseForRequest:finalRequestUrlRequest]; 

    if (finalcacheResponse) { 
     //Should not enter here 
     NSString* finaldataStr = [NSString stringWithUTF8String:[[finalcacheResponse data] bytes]]; 
     NSLog(@"data str r= %@",finaldataStr); 
     NSLog(@"url str r= %@",[[[cacheResponse response] URL] absoluteString]); 
    } 
} 

In iOS 7.6 URL machen die Antwort erfolgreich für die gelöscht wird requestURL, aber in iOS 8 wird es nie gelöscht. Ich habe gesucht, konnte aber keinen Grund finden, warum dies in iOS8 nicht funktionieren sollte.

Jede mögliche Hilfe ... geschätzt werden ..

Antwort

20

NSURLCache auf iOS 8.0.x gebrochen ist - es spült überhaupt nicht den Cache, so dass es ohne Grenze wächst. Eine detaillierte Untersuchung finden Sie unter http://blog.airsource.co.uk/2014/10/11/nsurlcache-ios8-broken/. Cache-Spülung ist in den 8.1 Betas behoben - aber removeCachedResponseForRequest: ist nicht.

removeCachedResponsesSinceDate:tut erscheinen auf iOS 8.0 arbeiten - eine API, die für 8,0 hinzugefügt wurde, hat sich aber nicht zu der Dokumentation gemacht noch (es ist in der API diffs). Ich bin unklar, welche Verwendung es für jedermann ist - sicherlich, was Sie normalerweise tun möchten, ist Cache-Antworten vor ein bestimmtes Datum zu entfernen.

removeAllCachedResponses funktioniert auch - aber das ist eine echte Vorschlaghammer Lösung.

+1

Ich sehe auch removeCachedResponseForRequest: funktioniert nicht in iOS 8.3. – osxdirk

+1

Funktioniert immer noch nicht auf iOS 9.2 –

+4

Aufgebrochen 9.3 & 9.3.1 – mmackh

0

Ich bekam ein ausreichendes Ergebnis, indem ich die zwischengespeicherte Antwort für eine bestimmte URL zurücksetzte und das Cache-Steuerelement in etwas änderte, das nie wie ein "max-age = 0" in der Kopfzeile zurückgegeben würde. Look here

Verwandte Themen