Загрузка 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...

Надеюсь, что это поможет.

Ответ 3

Благодаря @FábioSalata​​strong > я решил свою проблему следующим образом.

 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 ...