2015-02-24 8 views
5

Ich habe eine NSURLSession, die in einer Hintergrundwarteschlange ausgeführt wird. Ich füge meine NSURLProtocol Unterklasse zu der NSURLsessionConfiguration.protocolClases hinzu, aber die override class func canInitWithRequest(request: NSURLRequest) -> Bool wird nie aufgerufen. DieseGibt es eine Möglichkeit, NSURLProtocol in einer NSURLSession mit benutzerdefinierter Konfiguration zu verwenden?

ist, wie ich hinzufüge, meine NSURLProtocol

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
configuration.protocolClasses!.append(MockNetwork) 
urlSession = NSURLSession(configuration: configuration, delegate: self, delegateQueue: operationQueue) 

Auch habe ich versucht, mit der Sitzung im Hintergrund läuft nicht tun, aber auch nicht funktioniert hat:

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
configuration.protocolClasses!.append(MockNetwork) 
urlSession = NSURLSession(configuration: configuration) 

Da dies nicht funktioniert ich habe gerade versucht:

urlSession = NSURLSession.sharedSession() 

Und dies in meinem AppDelegate Aufruf

NSURLProtocol.registerClass(MockNetwork) 

Das funktioniert, was mache ich falsch ?!

+1

Dies funktioniert, was mache ich falsch? Antwort: Nichts :) –

+0

aber ich kann es nicht funktionieren, wenn eine benutzerdefinierte Konfiguration in einer Hintergrundwarteschlange verwendet ... das treibt mich CRAZY – Andres

Antwort

9

Nachdem ich einige Stunden damit verbracht habe herauszufinden, warum das nicht funktioniert habe, habe ich den Weg gefunden.

Statt:

configuration.protocolClasses?.append(MockNetwork.self) 

Do:

var protocolClasses = [AnyClass]() 
protocolClasses.append(MockNetwork.self) 

let configuration = URLSessionConfiguration.default 
configuration.protocolClasses = protocolClasses 

Danach alles ändern gearbeitet und nicht notwendig URLProtocol.registerClass(MockNetwork.self)

+0

Sie müssten immer noch Ihr benutzerdefiniertes Protokoll über NSURLProtocol.registerClass (MockNetwork) für den Fall registrieren Sie haben versucht, Web View-Anfragen abzufangen. – iOSAddicted

+0

protocolClasses verwendet 'AnyClass' und nicht' AnyObject'. Ihr Array müsste stattdessen '[AnyClass]()' sein. –

Verwandte Themen