9

我有一个自定义的 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 一起使用吗?

4

1 回答 1

19

AlamofireNSURLSession内部使用不尊重使用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")
于 2014-12-05T19:41:02.657 回答