Загрузка Alamofire из кеша, даже если политика кэша установлена на ReloadIgnoringLocalAndRemoteCacheData
Я установил политику кэширования для запроса в Alamofire игнорировать локальный кеш.
Затем я загружу viewcontroller с сетевым подключением, затем отключу сетевое подключение, убейте приложение и запустите его снова.
Теперь не отображается доступная сетевая ошибка (т.е. alamofire не создает объект nserror), а приложение работает так, как если бы запрос успешно получал данные из кеша. И странно, когда я пытался проверить кэшированные данные, используя
NSURLCache.sharedURLCache().cachedResponseForRequest(request)
nil возвращается, хотя данные были из кеша.
Единственный способ предотвратить кешированные ответы - выполнить 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
}
}
}
Что я хочу сделать, это загружать данные из кеша, только если сетевое соединение недоступно, что-то вроде ограниченного автономного режима. Как это сделать?
Ответы
Ответ 1
Я использую этот путь в проекте, и он работает:
let mutableURLRequest = NSMutableURLRequest(URL: SERVICEURL)
mutableURLRequest.HTTPMethod = "POST"
mutableURLRequest.HTTPBody = self.createJson()
mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
mutableURLRequest.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
request(mutableURLRequest).validate().responseJSON{ response in...
Надеюсь, что это поможет.
Ответ 2
ReloadIgnoringLocalAndRemoteCacheData не реализуется.
https://developer.apple.com/reference/foundation/nsurlrequestcachepolicy/1408722-reloadignoringlocalandremotecach
http://nshipster.com/nsurlcache/
Ответ 3
Благодаря @FábioSalatastrong > я решил свою проблему следующим образом.
var req = URLRequest(url: URL(string: "<URL>")!)
req.httpMethod = "GET"
req.setValue("application/json", forHTTPHeaderField: "Content-Type")
req.setValue("<Auth KEY>", forHTTPHeaderField:"Authorization" )
req.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
Alamofire.request(req).validate().responseJSON { response in ...