I am using the code below to set the caching policy of my URLSession via URLConfiguration.
if appDelegateObj.configuration == nil {
appDelegateObj.configuration = URLSessionConfiguration.default
}
if self.apiType == ServerRequest.API_TYPES_NAME.API1 {
if appDelegateObj.forceReload == true {
appDelegateObj.configuration?.urlCache = nil
appDelegateObj.configuration?.requestCachePolicy = .reloadIgnoringLocalCacheData
}else{
appDelegateObj.configuration?.requestCachePolicy = .returnCacheDataElseLoad
}
}else{
appDelegateObj.configuration?.requestCachePolicy = .reloadIgnoringLocalCacheData
}
session = URLSession(configuration: appDelegateObj.configuration!, delegate: nil, delegateQueue: nil)
The problem I am having is that I am getting the cached response back even after setting the
appDelegateObj.configuration?.urlCache = nil
The only way I am able to get fresh data is via using
appDelegateObj.configuration?.requestCachePolicy = .reloadIgnoringLocalCacheData
What am I doing wrong ? I need a way to clear all the cached data for the app.
I have tried using
URLCache.shared.removeAllCachedResponses()
but that too isn't working.
Several points:
In short, setting
reloadIgnoringLocalCacheData
is the correct way to do what you're doing (well, really,NSURLRequestReloadIgnoringLocalAndRemoteCacheData
).However, unless you're trying to support some weird offline mode, you probably do not want to be using
returnCacheDataElseLoad
. That mode ignores the cache expiration provided by the server, which you almost certainly do not want to do. Use the default policy (useProtocolCachePolicy
) instead.