Dlaczego buforuje odpowiedzi. Zwraca wcześniej pobrane odpowiedzi. Działa nawet po wyłączeniu połączenia sieciowego. Zresetowanie symulatora iOS również nie działa. Złożenie wniosku, a następnie ponowne połączenie z Internetem działa (buforowane).Zapobiegaj buforowaniu odpowiedzi przez NSURLSession
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()
}
Aktualizacja
udało mi się go rozwiązać poprzez wywołanie tego kodu z didFinishLaunching
w AppDelegate
:
func removeUrlCache()
{
NSURLCache.setSharedURLCache(NSURLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil))
}
Jednak wciąż jestem ciekaw dlaczego mój oryginalny kod nie działa . Czułbym się też nieco brzydki, aby wyłączyć pamięć podręczną dla całej aplikacji, aby rozwiązać mój problem.
Dzięki !! Czy odkryłeś coś więcej na ten temat? –
dodaj 'configuration.URLCache' do' nil' podczas tworzenia obiektu 'NSURLSessionConfiguration', a odpowiedzi nie będą buforowane. – execv