有没有办法在自定义配置的NSURLSession中使用NSURLProtocol?

时间:2015-02-24 20:21:08

标签: swift nsurlsession nsurlprotocol

我有一个在后台队列中运行的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)

这确实有效,我做错了什么?!

1 个答案:

答案 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)