Perché memorizza le risposte nella cache. Restituisce le risposte recuperate in precedenza. Funziona anche se si spegne la connessione di rete. Anche il reset del simulatore iOS non sembrava funzionare. Fare una richiesta, poi di nuovo con internet offline funziona (cache).Prevenzione di NSURLSession dalle risposte di memorizzazione nella cache
public let urlSession: NSURLSession
public init()
{
// ...
var configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.requestCachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
urlSession = NSURLSession(configuration: configuration)
}
func makeRequest(path: String, httpMethod:String, body:String?, baseUrl: String?, headers:[String:String]=[:], callback: JsonRequestCallback)
{
let urlString = (baseUrl ?? customOAuth2Manager.API_URL) + path
let url = NSURL(string: urlString)
let request = oauthInstance.request(forURL: url!)
request.HTTPMethod = httpMethod
self.customOAuth2Manager.setupRequest(request)
for (key, value) in headers {
request.setValue(value, forHTTPHeaderField:key)
}
if let body = body where body != "" {
let postData = (body as NSString).dataUsingEncoding(NSUTF8StringEncoding)
request.HTTPBody = postData
}
let task = urlSession.dataTaskWithRequest(request) { data, response, error in
self.parseData(data, response:response, error:error, body:body, callback: callback)
}
task.resume()
}
Aggiornamento
sono riuscito a risolverlo chiamando questo codice da didFinishLaunching
nel AppDelegate
:
func removeUrlCache()
{
NSURLCache.setSharedURLCache(NSURLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil))
}
Tuttavia, io sono ancora curioso di sapere perchè il mio codice originale non funziona . Sembra anche un po 'brutto disabilitare la cache di tutte le app per risolvere il mio problema.
Grazie !! Hai scoperto di più su questo? –
aggiungere 'configuration.URLCache' a' nil' quando si crea l'oggetto 'NSURLSessionConfiguration' e le risposte non verranno memorizzate nella cache. – execv