/ / Czy istnieje sposób użycia NSURLProtocol w sesji NSURL z niestandardową konfiguracją? - swift, nsurlsession, nsurlprotocol

Czy istnieje sposób użycia NSURLProtocol w NSURLSession z niestandardową konfiguracją? - szybki, nsurlsession, nsurlprotocol

Mam sesję NSURL, która działa w kolejce w tle. Dodam moje NSURLProtocol podklasa do NSURLsessionConfiguration.protocolClases ale override class func canInitWithRequest(request: NSURLRequest) -> Bool nigdy nie zostanie wywołany.

W ten sposób dodaję moje NSURLProtocol

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

Próbowałem też, gdy sesja nie działała w tle, ale też nie działała:

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

Ponieważ to nie działało, po prostu próbowałem:

urlSession = NSURLSession.sharedSession()

I nazywam to w mojej aplikacjiDelegate

NSURLProtocol.registerClass(MockNetwork)

To działa, co robię źle ?!

Odpowiedzi:

9 dla odpowiedzi № 1

Po spędzeniu kilku godzin, próbując dowiedzieć się, dlaczego to nie działa, znalazłem sposób na zrobienie tego.

Zamiast:

configuration.protocolClasses?.append(MockNetwork.self)

Zrobić:

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

let configuration = URLSessionConfiguration.default
configuration.protocolClasses = protocolClasses

Po tej zmianie wszystko działało i nie było konieczne URLProtocol.registerClass(MockNetwork.self)