/ / Esiste un modo per utilizzare NSURLProtocol in una NSURLSession con configurazione personalizzata? - swift, nsurlsession, nsurlprotocol

C'è un modo per usare NSURLProtocol in una NSURLSession con configurazione personalizzata? - rapido, nsurlesso, nsurlprotocol

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 № 1

Dopo 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)