Ho una sessione NSURL che viene eseguita in una coda in background. Sto aggiungendo il mio NSURLProtocol
sottoclasse di NSURLsessionConfiguration.protocolClases
ma il override class func canInitWithRequest(request: NSURLRequest) -> Bool
non viene mai chiamato.
Ecco come sto aggiungendo il mio NSURLProtocol
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.protocolClasses!.append(MockNetwork)
urlSession = NSURLSession(configuration: configuration, delegate: self, delegateQueue: operationQueue)
Inoltre ho provato con la sessione non in esecuzione in background ma non ha funzionato:
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.protocolClasses!.append(MockNetwork)
urlSession = NSURLSession(configuration: configuration)
Dato che non funzionava, ho appena provato:
urlSession = NSURLSession.sharedSession()
E chiamandolo nel mio AppDelegate
NSURLProtocol.registerClass(MockNetwork)
Questo funziona, cosa sto facendo di sbagliato ?!
risposte:
9 per risposta № 1Dopo aver trascorso qualche ora in più cercando di scoprire perché questo non funzionava, ho trovato il modo di farlo.
Invece di:
configuration.protocolClasses?.append(MockNetwork.self)
Fare:
var protocolClasses = [AnyClass]()
protocolClasses.append(MockNetwork.self)
let configuration = URLSessionConfiguration.default
configuration.protocolClasses = protocolClasses
Dopo quel cambiamento tutto ha funzionato e non è necessario URLProtocol.registerClass(MockNetwork.self)