Ich versuche dieses Tutorial zu implementieren, das ein benutzerdefiniertes NSURLProtocol mit NSURLConnection implementiert.Benutzerdefiniertes NSURLProtocol mit NSURLSession
https://www.raywenderlich.com/76735/using-nsurlprotocol-swift
Es funktioniert wie erwartet, aber jetzt, dass NSURLConnection in iOS9 veraltet ist, ich versuche es zu NSURLSession zu konvertieren.
Leider hat es nicht funktioniert.
Ich lade eine Website in uiwebview, wenn ich NSURLConnection es lädt und alles funktioniert wie erwartet, alle HTTP-Anfragen aus der Webansicht wird erfasst, aber nicht bei der Verwendung von NSURLSession.
Jede Hilfe wird geschätzt.
hier ist mein 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")
}
}
Wie wissen Sie, Ihr Code funktioniert nicht? Was hast du getan, um das Problem selbst aufzuspüren? Können Sie das Codebeispiel erneut ausführen und alle auskommentierten Abschnitte entfernen? Vielleicht fügen Sie einige Kommentare hinzu, was Sie in jeder Routine erreichen möchten. –
Hey, ich bin neu in Swift und konfrontiert Problem mit Webview Caching. Ich versuche mit der gleichen Quelle die Webseite richtig zu laden und im Cache zu speichern. Aber wenn das Gerät offline ist, kann ich es nicht aus den Cache-Daten abrufen. Möglicherweise muss ich den Code mit URLSession aktualisieren. Können Sie mir bitte mit dieser Quelle bitte helfen :(https://drive.google.com/file/d/0B-5GPXUpPZh-Q2FOWEJudXRaQkE/view?usp=sharing –