ローカルキャッシュを無視するようにAlamofireでリクエストするようにキャッシュポリシーを設定しました。
次に、ネットワーク接続を備えたビューコントローラーをロードしてから、ネットワーク接続を切断し、アプリを終了して再度実行します。
現在、ネットワークで利用可能なエラーは表示されません(つまり、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
}
}
}
_
制限付きオフラインモードなど、ネットワーク接続が利用できない場合にのみ、キャッシュからデータをロードしたいのですが、どうすればよいですか?
私はプロジェクトでこの方法を使用していて、うまくいきます:
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...
それが役に立てば幸い。
おかげで@FábioSalata私はこのように私の問題を解決しました。
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 ...
ReloadIgnoringLocalAndRemoteCacheDataは実装されていません。
http://nshipster.com/nsurlcache/
更新:iOS 13以降、NSURLRequest.CachePolicy.reloadRevalidatingCacheDataとNSURLRequest.CachePolicy.reloadIgnoringLocalAndRemoteCacheDataが実装されています。 https://developer.Apple.com/documentation/ios_ipados_release_notes/ios_13_release_notes