2

我尝试向 a 添加自定义NSURLProtocolNSURLSession以便为某些呼叫提供测试数据,同时为所有其他呼叫提供正常的互联网连接。我需要通过添加NSURLProtocol到会话配置来做到这一点protocolClasses,因为会话驻留在项目中包含的库中。

出于某种原因,当我的自定义协议通过返回调用true来接受请求时,我的设置确实提供了测试数据canInitWithRequest,但是对于所有其他请求(当它返回时false),仍然在protocolClasses我的自定义协议后面的默认协议获取请求和甚至truecanInitWithRequest通话中返回,但他们从不将请求发送到互联网,而是在 30 秒后发送请求超时。当我从 中删除我的自定义协议时protocolClasses,一切正常 - 当然,不再提供我的测试数据。

这是我用于安装协议的代码:

    NSURLSessionConfiguration* sessionConfiguration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
    NSMutableArray* protocols = [NSMutableArray arrayWithArray:sessionConfiguration.protocolClasses];
    [protocols insertObject:[MyProtocol class] atIndex:0];
    sessionConfiguration.protocolClasses = protocols;
    mySession = [NSURLSession sessionWithConfiguration:sessionConfiguration];

当我用 注册自定义协议时[NSURLProtocol registerClass:[MyProtocol class]],失败确实有效,但正如所写,我不能在我的项目中使用这种方法。

关于为什么这不能正常工作的任何想法?

4

1 回答 1

0

首先,您的代码片段中存在打印错误,它应该是变量protocols而不是array变量。))

propertyFoKey: inRequest:我认为在自定义协议的情况下,看到协议客户端等( )是有意义的startLoading(或stopLoading)被调用的方法吗?

啊,我已经重新阅读了你的问题。

如果是[NSURLProtocol registerClass],则自定义类(如果是最新注册的)将处理 URL 方案。在您的情况下,似乎有另一个(无效)协议来处理请求。

于 2015-06-04T10:35:56.453 回答