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

Is there a way to use NSURLProtocol in a NSURLSession with custom config?

我有一个在后台队列中运行的 NSURLSession。我正在将我的 NSURLProtocol 子类添加到 NSURLsessionConfiguration.protocolClasesoverride 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)

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

在花了更多时间试图找出为什么这不起作用之后,我找到了这样做的方法。

而不是:

configuration.protocolClasses?.append(MockNetwork.self)

做:

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

let configuration = URLSessionConfiguration.default
configuration.protocolClasses = protocolClasses

在那之后改变一切正常,不需要 URLProtocol.registerClass(MockNetwork.self)