我尝试向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,但正如我所写,我无法在我的项目中使用此方法。
有关为什么这种方法无法正常工作的任何想法?
答案 0 :(得分:0)
首先,您的代码段中存在错误打印,应该是protocols
而不是array
变量。 ))
我认为在自定义协议的情况下,查看协议客户端等是有意义的(propertyFoKey: inRequest:
)
方法startLoading
(或stopLoading
)是否被调用?
啊,我已经重新阅读了你的问题。
对于[NSURLProtocol registerClass]
,自定义类(如果是最新注册的)将处理URL方案。
在您的情况下,似乎有另一个(void)协议处理请求。