添加到configuration.protocolClasses的自定义NSURLProtocol可防止使用默认URL协议

时间:2015-06-04 10:08:09

标签: ios nsurlprotocol

我尝试向NSURLProtocol添加自定义NSURLSession,以便为某些呼叫提供测试数据,同时为所有其他呼叫提供正常的互联网连接。我需要将NSURLProtocol添加到会话配置protocolClasses,因为会话位于项目中包含的库中。

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

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

protocolClasses

当我使用 NSURLSessionConfiguration* sessionConfiguration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; NSMutableArray* protocols = [NSMutableArray arrayWithArray:sessionConfiguration.protocolClasses]; [protocols insertObject:[MyProtocol class] atIndex:0]; sessionConfiguration.protocolClasses = protocols; mySession = [NSURLSession sessionWithConfiguration:sessionConfiguration]; 注册自定义协议时,可以使用fallthrough,但正如我所写,我无法在我的项目中使用此方法。

有关为什么这种方法无法正常工作的任何想法?

1 个答案:

答案 0 :(得分:0)

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

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

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

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