2012-12-22 2 views
8

Ich verwende AFNetworking in meiner App und versuchen, es im Offline-Modus zu arbeiten, indem Sie die zwischengespeicherten Daten verwenden, wenn verfügbar.AFNetworking (AFHttpClient) Offline-Modus arbeitet nicht mit NSURLRequestReturnCacheDataDontLoad Richtlinie

Ich erwartete, nachdem ich die Anfrage Cache-Richtlinie zu NSURLRequestReturnCacheDataDontLoad, getPath: Parameter: Erfolg: Fehler: Erfolgreich mit den zwischengespeicherten Daten im Offline-Modus. Aber selbst wenn sich Daten im Cache befinden (ich verifiziere, indem ich den Cache mit dem Code überprüfe), wird getPath einfach im Flugzeugmodus fehlschlagen.

Es gab einen Thread in AFNetworking GitHub: https://github.com/AFNetworking/AFNetworking/issues/378 Aber schien das Problem überhaupt nicht angesprochen. Der Autor von AFNetworking Punkt einfach zu Apple's document, und es wird gesagt:

NSURLRequestReturnCacheDataDontLoad Specifies that the existing cache data should be used to satisfy a request, regardless of its age or expiration date. If there is no existing data in the cache corresponding to a URL load request, no attempt is made to load the data from the originating source, and the load is considered to have failed. This constant specifies a behavior that is similar to an “offline” mode.

Wie Apple sagte, NSURLRequestReturnCacheDataDontLoad genau für die Offline-Modus ausgelegt ist.

Ich teste in iOS6, ich habe mit NSURLCache und SDURLCache getestet, alle haben das gleiche Ergebnis.

Fehler bei der Anforderung, die Fehlermeldung:

2012-12-22 03:11:18.988 Testapp[43692:907] error: Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo=0x211b87c0 {NSErrorFailingURLStringKey=http://Testapp.com/api/v1/photo/latest/, NSErrorFailingURLKey=http://Testapp.com/api/v1/photo/latest/, NSLocalizedDescription=The Internet connection appears to be offline., NSUnderlyingError=0x211b9720 "The Internet connection appears to be offline."}

Antwort

7

Es stellte sich heraus, es ist ein Fehler in iOS 6.

in AFNetworking eine Diskussion ist es genau für dieses Problem: https://github.com/AFNetworking/AFNetworking/issues/566

Danke für die Tipps und Experimente von guykogus zu diesem Thema. Ich habe eine Nacht in dieser Angelegenheit verbracht!

A zusammengefasst Arbeit um die Antwort aus dem Cache gelesen wird, statt Verwendung NSURLRequestReturnCacheDataDontLoad Politik:

NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request]; 
if (cachedResponse != nil && 
    [[cachedResponse data] length] > 0) 
{ 
    // Get cached data 
    .... 
} 
Verwandte Themen