Sto cercando di implementare questo tutorial che implementa un NSURLProtocol personalizzato con NSURLConnection.Custom NSURLProtocol con NSURLSession
https://www.raywenderlich.com/76735/using-nsurlprotocol-swift
funziona come previsto, ma ora che NSURLConnection è deprecato in iOS9, sto cercando di convertirlo in NSURLSession.
Sfortunatamente non ha funzionato.
Sto caricando un sito Web in uiwebview, se utilizzo NSURLConnection viene caricato e tutto funziona come previsto, tutte le richieste http dalla webview vengono acquisite, ma non quando si utilizza NSURLSession.
Qualsiasi aiuto è apprezzato.
Ecco il mio codice
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")
}
}
Come fai a sapere il codice non funziona? Che cosa hai fatto per rintracciare il problema da solo? Puoi tornare indietro nell'esempio di codice e rimuovere tutte le sezioni commentate? Forse aggiungi alcuni commenti su ciò che stai cercando di ottenere in ogni routine. –
Ehi, sono nuovo in swift e affronta il problema con il caching della webview. Sto provando con la stessa fonte, la pagina web si carica correttamente e salva nella cache. Ma quando il dispositivo è offline, non riesco a ottenerlo dai dati della cache. Potrebbe essere necessario aggiornare il codice con l'URL. Potete per favore aiutarmi con questa fonte per favore :(https://drive.google.com/file/d/0B-5GPXUpPZh-Q2FOWEJudXRaQkE/view?usp=sharing –