Cómo deshabilitar el almacenamiento en caching en Alamofire

Cuando envío una request GET dos veces con Alamofire recibo la misma respuesta, pero espero otra. Me preguntaba si era por el caching, y si es así, me gustaría saber cómo desactivarlo.

veloz 3, alamofire 4

Mi solución fue:

creando una extensión para Alamofire:

extension Alamofire.SessionManager{ @discardableResult open func requestWithoutCache( _ url: URLConvertible, method: HTTPMethod = .get, parameters: Parameters? = nil, encoding: ParameterEncoding = URLEncoding.default, headers: HTTPHeaders? = nil) -> DataRequest { do { var urlRequest = try URLRequest(url: url, method: method, headers: headers) urlRequest.cachePolicy = .reloadIgnoringCacheData // <<== Cache disabled let encodedURLRequest = try encoding.encode(urlRequest, with: parameters) return request(encodedURLRequest) } catch { print(error) return request(URLRequest(url: URL(string: "http://example.com/wrong_request")!)) } } } 

y usarlo:

 Alamofire.SessionManager.default .requestWithoutCache("https://google.com/").response { response in print("Request: \(response.request)") print("Response: \(response.response)") print("Error: \(response.error)") } 

Tienes pocas opciones.

Inhabilitando completamente el URLCache

 let manager: Manager = { let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.URLCache = nil return Manager(configuration: configuration) }() 

Configuración de la política de caching de request

 let manager: Manager = { let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.requestCachePolicy = .ReloadIgnoringLocalCacheData return Manager(configuration: configuration) }() 

Ambos enfoques deberían hacer el truco para ti. Para get más información, sugiero leer la documentation para NSURLSessionConfiguration y NSURLCache . Otra gran reference es el artículo NSHipster sobre NSURLCache .

Esto es lo que funcionó para mí.

 NSURLCache.shanetworkingURLCache().removeAllCachedResponses() 

Swift 3

 URLCache.shanetworking.removeAllCachedResponses() 

Otra opción si desea utilizar el administrador compartido de Alamofire sería hacer esto:

 Alamofire.Manager.shanetworkingInstance.session.configuration.requestCachePolicy = .ReloadIgnoringLocalCacheData 

Luego puede usar Alamofire.request(.GET, urlString).... con la nueva política de caching.

Una manera más fácil de superar el problema de caching para una llamada en particular es simplemente agregar un número aleatorio en los parameters de la llamada.

Para Swift 3, puede usar, arc4random() para generar un número aleatorio.

En Alamofire 4 y Swift 3 :

 // outside function, inside class var sessionManager: SessionManager! func someFunc() { let configuration = URLSessionConfiguration.default configuration.urlCache = nil let sessionManager = Alamofire.SessionManager(configuration: configuration) sessionManager.request("http://example.com/get").responseJSON { response in // ... } }