El modo fuera de línea AFNetworking (AFHttpClient) no funciona con la política NSURLRequestReturnCacheDataDontLoad

Estoy usando AFNetworking en mi aplicación e bash hacer que funcione en el modo fuera de línea mediante el uso de los datos almacenados en caching, si están disponibles.

Esperé después de establecer la política de caching de request en NSURLRequestReturnCacheDataDontLoad, getPath: parameters: success: failure: tendrá éxito con los datos almacenados en caching mientras está fuera de línea. Sin embargo, incluso si hay datos en el caching (verifiqué comprobando el caching con el código), getPath simplemente fallará en el modo avión.

Hubo un hilo en AFNetworking github: https://github.com/AFNetworking/AFNetworking/issues/378 Pero parece que el problema no se aborda en absoluto. El autor de AFNetworking simplemente señala el documento de Apple y dijo:

NSURLRequestReturnCacheDataDontLoad Especifica que los datos de caching existentes se deben usar para satisfacer una request, independientemente de su edad o date de caducidad. Si no hay datos existentes en el caching correspondientes a una request de carga de URL, no se intenta cargar los datos desde la fuente de origen, y se considera que la carga ha fallado. Esta constante especifica un comportamiento similar al modo "sin connection".

Como dijo Apple, NSURLRequestReturnCacheDataDontLoad está diseñado exactamente para el modo fuera de línea.

Estoy probando en iOS6, probé con NSURLCache y SDURLCache, todos tienen el mismo resultado.

La request falló, el post de error:

2012-12-22 03: 11: 18.988 Testapp [43692: 907] error: Error Domain = NSURLErrorDomain Code = -1009 "La connection a Internet parece estar fuera de línea". UserInfo = 0x211b87c0 {NSErrorFailingURLStringKey = http: //Testapp.com/api/v1/photo/latest/, NSErrorFailingURLKey = http: //Testapp.com/api/v1/photo/latest/, NSLocalizedDescription = Parece que la connection a Internet es sin connection., NSUnderlyingError = 0x211b9720 "La connection a Internet parece estar fuera de línea".}

Resulta que es un error en iOS 6.

Hay un hilo de discusión en AFNetworking exactamente para este problema: https://github.com/AFNetworking/AFNetworking/issues/566

Gracias por consejos y experimentos de guykogus sobre este tema. Pasé una noche en este tema!

Un trabajo resumido es leer la respuesta del caching, en lugar de utilizar la política NSURLRequestReturnCacheDataDontLoad:

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