Ustawiam zasady dotyczące pamięci podręcznej, aby zażądać w Alamofire ignorowania lokalnej pamięci podręcznej.Ładowanie Alamofire z pamięci podręcznej nawet przy ustawieniu zasad pamięci podręcznej na ReloadIgnoringLocalAndRemoteCacheData
Następnie ładuję kontroler widokowy z połączeniem sieciowym, a następnie odłączam połączenie sieciowe, zabijam aplikację i uruchamiam ją ponownie.
Teraz brak błędu w sieci nie jest wyświetlany (np. Alamofire nie tworzy obiektu nserror), ale aplikacja działa tak, jakby żądanie udało się uzyskać dane z pamięci podręcznej oczywiście.I dziwne jest to, gdy próbowałem sprawdzić buforowane dane stosując
NSURLCache.sharedURLCache().cachedResponseForRequest(request)
nil jest zwracany eventhough danych z pamięci podręcznej był ..
jedyny sposób mogę zapobiec buforowane odpowiedzi jest wykonać NSURLCache.sharedURLCache().removeAllCachedResponses()
let request = NSURLRequest(URL: NSURL(string: url)!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 100)
Alamofire.manager.request(method, request, parameters:params)
.responseJSON { (request, response, data, error) in
if let anError = error {
if anError.code == NSURLErrorNotConnectedToInternet {
UIAlertView(title: "Alert", message: "No Network Connection Available", delegate: nil, cancelButtonTitle: "ok").show()
}
} else if let data: AnyObject = data {
println(NSURLCache.sharedURLCache().cachedResponseForRequest(request))
//prints nil
}
}
}
Co chcę zrobić, to ładować dane z pamięci podręcznej tylko wtedy, gdy połączenie sieciowe nie jest dostępne, coś w rodzaju ograniczonego trybu offline. Jak to zrobić?
Dzięki. To działało idealnie. – iksnae
jaka jest prośba? –
@HongZhou Jest to wygodna metoda Alamofire. Można go użyć jako 'Alamofire.request (mutableURLRequest) .validate(). ResponseJSON {odpowiedź w ...' –