2012-12-22 8 views
8

Używam AFNetworking w mojej aplikacji i staram się, aby działało w trybie offline, używając danych z pamięci podręcznej, jeśli są dostępne.Tryb pracy sieciowej AFHwork (AFHttpClient) nie działa z NSURLRequestReturnCacheDataDontLoad policy

Spodziewałem się po ustawieniu zasad dotyczących pamięci podręcznej żądania na NSURLRequestReturnCacheDataDontLoad, getPath: parameters: success: failure: odniesie sukces z buforowanymi danymi w trybie offline. Jednak nawet jeśli istnieją dane w pamięci podręcznej (sprawdziłem poprzez sprawdzenie pamięci podręcznej z kodem), getPath po prostu zawiedzie w trybie samolotowym.

W programie AFNetworking github był wątek: https://github.com/AFNetworking/AFNetworking/issues/378 Ale wydawało się, że problem w ogóle nie jest rozwiązany. Autor AFNetworking Wystarczy wskazać Apple's document, a on powiedział:

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.

Jak powiedział Apple NSURLRequestReturnCacheDataDontLoad jest dokładnie zaprojektowany dla trybu offline.

Testuję w iOS6, testowałem zarówno z NSURLCache i SDURLCache, wszystkie mają taki sam wynik.

Żądanie nie powiodło się, komunikat o błędzie:

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."}

Odpowiedz

7

okazało się, że jest to błąd w iOS 6.

Jest wątek dyskusji w AFNetworking dokładnie tego problemu: https://github.com/AFNetworking/AFNetworking/issues/566

Dzięki za porady i eksperymenty z Guykogus na ten temat. Spędziłem noc w tym wydaniu!

skrócona obejść się odczytać odpowiedź z pamięci podręcznej, zamiast stosowania polityki NSURLRequestReturnCacheDataDontLoad:

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