我有一个在后台队列中运行的NSURLSession。我将NSURLProtocol
子类添加到NSURLsessionConfiguration.protocolClases
,但override class func canInitWithRequest(request: NSURLRequest) -> Bool
永远不会被调用。
这就是我添加NSURLProtocol
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.protocolClasses!.append(MockNetwork)
urlSession = NSURLSession(configuration: configuration, delegate: self, delegateQueue: operationQueue)
此外,我尝试使用不在后台运行的会话,但也没有工作:
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.protocolClasses!.append(MockNetwork)
urlSession = NSURLSession(configuration: configuration)
由于这不起作用,我只是尝试了:
urlSession = NSURLSession.sharedSession()
在我的AppDelegate中调用它
NSURLProtocol.registerClass(MockNetwork)
这确实有效,我做错了什么?!
答案 0 :(得分:9)
在花了几个小时试图找出为什么这不起作用后,我找到了这样做的方法。
而不是:
configuration.protocolClasses?.append(MockNetwork.self)
执行:
var protocolClasses = [AnyClass]()
protocolClasses.append(MockNetwork.self)
let configuration = URLSessionConfiguration.default
configuration.protocolClasses = protocolClasses
在此之后,一切都有效,而不是URLProtocol.registerClass(MockNetwork.self)