Prévenir NSURLSession de la mise en cache des réponses
Pourquoi il cache des réponses. Il retourne au préalable extrait des réponses. Il fonctionne même si la désactivation de la connexion réseau. Réinitialiser le simulateur iOS n'a pas l'air de fonctionner non plus. Faire une demande, puis de nouveau avec internet en mode hors connexion n'travail (mise en cache).
public let urlSession: NSURLSession
public init()
{
//...
var configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.requestCachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
urlSession = NSURLSession(configuration: configuration)
}
func makeRequest(path: String, httpMethod:String, body:String?, baseUrl: String?, headers:[String:String]=[:], callback: JsonRequestCallback)
{
let urlString = (baseUrl ?? customOAuth2Manager.API_URL) + path
let url = NSURL(string: urlString)
let request = oauthInstance.request(forURL: url!)
request.HTTPMethod = httpMethod
self.customOAuth2Manager.setupRequest(request)
for (key, value) in headers {
request.setValue(value, forHTTPHeaderField:key)
}
if let body = body where body != "" {
let postData = (body as NSString).dataUsingEncoding(NSUTF8StringEncoding)
request.HTTPBody = postData
}
let task = urlSession.dataTaskWithRequest(request) { data, response, error in
self.parseData(data, response:response, error:error, body:body, callback: callback)
}
task.resume()
}
Mise à jour
J'ai réussi à le résoudre en composant ce code à partir de didFinishLaunching
dans le AppDelegate
:
func removeUrlCache()
{
NSURLCache.setSharedURLCache(NSURLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil))
}
Cependant, je suis toujours curieux de savoir pourquoi mon code ne fonctionne pas. Il se sent aussi un peu moche pour désactiver le cache pour tous les app pour résoudre mon problème.
- Merci!! Avez-vous découvrir plus à ce sujet?
- ajouter
configuration.URLCache
ànil
lors de la création deNSURLSessionConfiguration
objet et les réponses ne seront pas mis en cache.
Vous devez vous connecter pour publier un commentaire.
Merci pour la question. Il me mettre sur le droit chemin.
Il y a plus de possibilités avec
NSURLCache.sharedURLCache()
et vous n'avez pas besoin de changer la capacité de la mémoire et de la capacité du disque pour cela.Vous pouvez supprimer toutes les réponses mises en cache. Fonctionne pour moi.
Ou vous pouvez supprimer le cache pour une réponse unique. Ne fonctionne pas pour moi iOS 9.
J'espère que cela aide quelqu'un!
Edit:
NSURLCache.sharedURLCache().removeCachedResponseForRequest(request)
ne fonctionne pas pour moi malheureusementMon alternative était: je suis en utilisant ce " tirer pour rafraîchir et je suis suivi la dernière date de mise à jour. Donc j'ai été en utilisant le code suivant:
Mais pour certaines raisons, ce n'est pas le travail de l'éther.
Depuis iOS 8, seul cache méthodes de suppression semble être rompu: https://stackoverflow.com/a/26343653/2826164
2019-05-24, mis à jour à Swift 5.
applicationWillResignActive
laisse encore plein de Cache.le fichier db.Ne sais pas si cela empêche de chaching ou tout simplement les forces de frais de rechargement à chaque fois, mais c'est ce qui a fonctionné pour moi:
Voici une capture d'écran montrant d'autres options dans le cas où quelqu'un a besoin d'eux:
Je voudrais mettre en œuvre URLSessionDelegate et d'appeler la completionBlock à néant au willCache délégué de la mise en œuvre. C'était votre demande ne sera jamais chached