J'essaie d'implémenter ce tutoriel qui implémente un NSURLProtocol personnalisé avec NSURLConnection.Personnalisé NSURLProtocol avec NSURLSession
https://www.raywenderlich.com/76735/using-nsurlprotocol-swift
Il fonctionne comme prévu, mais maintenant que NSURLConnection est dépréciée dans iOS9, je suis en train de le convertir en NSURLSession.
Malheureusement, cela n'a pas fonctionné.
Je chargement d'un site dans UIWebView, si je l'utilise NSURLConnection il charge et travail tout comme prévu, toutes les requêtes HTTP de la WebView est capturé, mais pas lors de l'utilisation NSURLSession.
Toute aide est appréciée.
ici est mon code
import UIKit
class MyProtocol: NSURLProtocol, NSURLSessionDataDelegate, NSURLSessionTaskDelegate, NSURLSessionDelegate {
//var connection: NSURLConnection!
var mutableData: NSMutableData!
var response: NSURLResponse!
var dataSession: NSURLSessionDataTask!
override class func canInitWithRequest(request: NSURLRequest) -> Bool {
if NSURLProtocol.propertyForKey("MyURLProtocolHandledKey", inRequest: request) != nil {
return false
}
return true
}
override class func canonicalRequestForRequest(request: NSURLRequest) -> NSURLRequest {
return request
}
override class func requestIsCacheEquivalent(aRequest: NSURLRequest,
toRequest bRequest: NSURLRequest) -> Bool {
return super.requestIsCacheEquivalent(aRequest, toRequest:bRequest)
}
override func startLoading() {
let newRequest = self.request.mutableCopy() as! NSMutableURLRequest
NSURLProtocol.setProperty(true, forKey: "MyURLProtocolHandledKey", inRequest: newRequest)
self.dataSession = NSURLSession.sharedSession().dataTaskWithRequest(newRequest)
dataSession.resume()
self.mutableData = NSMutableData()
}
override func stopLoading() {
print("Data task stop")
self.dataSession.cancel()
self.mutableData = nil
}
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) {
self.response = response
self.mutableData = NSMutableData()
print(mutableData)
}
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
self.client?.URLProtocol(self, didLoadData: data)
self.mutableData.appendData(data)
}
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
if (error == nil)
{
self.client!.URLProtocolDidFinishLoading(self)
self.saveCachedResponse()
}
else
{
self.client?.URLProtocol(self, didFailWithError: error!)
}
}
func saveCachedResponse() {
let timeStamp = NSDate()
let urlString = self.request.URL?.absoluteString
let dataString = NSString(data: self.mutableData, encoding: NSUTF8StringEncoding) as NSString?
print("TiemStamp:\(timeStamp)\nURL: \(urlString)\n\nDATA:\(dataString)\n\n")
}
}
Comment savez-vous votre code ne fonctionne pas? Qu'avez-vous fait pour repérer vous-même le problème? Pouvez-vous revenir en arrière dans votre exemple de code et supprimer toutes les sections commentées? Ajoutez peut-être quelques commentaires sur ce que vous essayez d'accomplir dans chaque routine. –
Hey, je suis nouveau dans le problème rapide et face à la mise en cache webview. J'essaie avec la même source, la page Web charger correctement et enregistrer dans le cache. Mais lorsque l'appareil est hors ligne, je ne peux pas l'obtenir à partir des données du cache. Peut-être que je dois mettre à jour le code avec urlsession. Pouvez-vous s'il vous plaît m'aider avec cette source s'il vous plaît :(https://drive.google.com/file/d/0B-5GPXUpPZh-Q2FOWEJudXRaQkE/view?usp=sharing –