Ich hoffe, dass jemand etwas Licht auf ein paar Dinge, die ich erforscht habe, aber nicht viel Fortschritte auf etwas beleuchten kann.Wie NSURLCache verwenden, um zwischengespeicherte API-Antworten zurückzugeben, wenn offline (iOS App)
Ich möchte NSURLCache nutzen, um zwischengespeicherte Antworten für API-Aufrufe zurückzugeben, die ich innerhalb einer iOS App mache. Wenn das Gerät online ist, möchte ich die zwischengespeicherte Antwort zurückgeben, wenn es gerade neu genug ist, andernfalls von der Fernbedienung abrufen. Wenn das Gerät offline ist, möchte ich die zwischengespeicherte Antwort (falls vorhanden) sofort zurückgeben, unabhängig vom Alter.
Ich benutze AFNetworking
. Die API-Aufrufe, die ich mache, sind auf einem Server, den ich kontrolliere. Protokoll ist HTTPS. Der Antwortkopf Cache-Control
ist derzeit "max-age=0, public"
. Ich setze derzeit keine cache-bezogenen Anfrage-Header (sollte ich?). Ich habe die Cache-Richtlinie der Anfrage auf NSURLRequestReturnCacheDataDontLoad
gesetzt, wenn sie offline ist, und verwende die Standardeinstellung NSURLRequestUseProtocolCachePolicy
, wenn sie online ist. Und ich kann die Anfragen und ihre Antworten in der Standardeinstellung Cache.db
auf der Festplatte sehen. Allerdings, wenn ich offline alle Anfragen scheitern (keine cached Antworten (trotz erscheinen zu zwischengespeichert wurde) verwendet werden/zurückgegeben
Per http://nshipster.com/nsurlcache/ ich ein sharedURLCache
in didFinishLaunchingWithOptions
initialisieren und stellen Sie den AFNetworking setCacheResponse
Block zu so etwas wie diese.:
NSMutableDictionary *mutableUserInfo = [[cachedResponse userInfo] mutableCopy]; NSMutableData *mutableData = [[cachedResponse data] mutableCopy]; NSURLCacheStoragePolicy storagePolicy = NSURLCacheStorageAllowed; return [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response] data:mutableData userInfo:mutableUserInfo storagePolicy:storagePolicy];
ich habe diese und andere Beiträge zum Thema lesen:
http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/ http://blackpixel.com/blog/2012/05/caching-and-nsurlconnection.html
Ich frage mich, ob jemand diese Funktionalität vor der Verwendung des Standards NSURLCache
erfolgreich erreicht hat (auch interessiert an Erfolgsgeschichten mit SDURLCache
, aber Peter S. sagt, dass ab iOS5 Disk-Caching unterstützt wird SDURLCache
wird nicht mehr benötigt, dh ich ' möchte den standardmäßig eingebauten Cache verwenden).
Vielen Dank im Voraus!
Es erscheint der 7. in iOS wurde behoben gibt es eine offizielle Zusammenarbeit Bestätigung von Apple, dass dieser Fehler behoben wurde? – hpique