我有一个自定义的NSURLProtocol类来提供测试数据,而我正在尝试使用Alamofire,但在通过Manager请求方法发出请求时似乎没有使用它。
此请求通过并返回结果就好了,但是没有触发canInitWithRequest:
NSURLProtocol.registerClass(DBDummyURLProtocol)
class MyURLRequestConvertible : URLRequestConvertible {
var URLRequest: NSURLRequest {
return NSURLRequest(URL: NSURL(scheme: "http", host: "cnn.com", path: "/")!)
}
}
var myURLRequestConvertible = MyURLRequestConvertible();
Manager.sharedInstance.request(myURLRequestConvertible)
如果我使用简单的NSURLConnection,则按照我的预期调用canInitWithRequest方法:
NSURLProtocol.registerClass(DBDummyURLProtocol)
var request = NSURLRequest(URL: NSURL(scheme: "http", host: "cnn.com", path: "/")!)
NSURLConnection(request: request, delegate:nil, startImmediately:true)
我做错了吗?这应该与Alamofire合作吗?
答案 0 :(得分:18)
Alamofire在内部使用NSURLSession
,不尊重使用NSURLProtocol.registerClass()
注册的协议类。相反,它使用NSURLSessionConfiguration
对象,该对象具有protocolClasses
属性。
不幸的是,由于会话始终返回副本且属性不可写,因此无法更改此配置。
您可以做的是创建自己的Alamofire.Manager
实例并将其传递给自定义NSURLSessionConfiguration
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.protocolClasses.insert(DBDummyURLProtocol.self, atIndex: 0)
let manager = Manager(configuration: configuration)
manager.request(.GET, "http://example.com")