6

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

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

4

1 回答 1

10

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

代替:

configuration.protocolClasses?.append(MockNetwork.self)

做:

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

let configuration = URLSessionConfiguration.default
configuration.protocolClasses = protocolClasses

在那之后,一切都奏效了,没有必要URLProtocol.registerClass(MockNetwork.self)

于 2015-02-25T13:25:50.860 回答