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