我尝试添加自定义 NSURLProtocol
到 NSURLSession
为了为某些调用提供测试数据,同时为所有其他调用提供正常的互联网连接。我需要通过添加 NSURLProtocol
来做到这一点到 session 配置的protocolClasses
,因为 session 驻留在项目中包含的库中。
出于某种原因,当我的自定义协议(protocol)通过返回 true
接受请求时,我的设置确实提供了测试数据。对于canInitWithRequest
调用,但对于所有其他请求(当它返回 false
时)仍然在 protocolClasses
中的默认协议(protocol)在我的自定义协议(protocol)后面获取请求,甚至返回 true
在 canInitWithRequest
调用,但他们从不将请求发送到互联网 并在 30 秒后发送请求超时。当我从 protocolClasses
中删除我的自定义协议(protocol)时,一切正常——当然,只是不再提供我的测试数据。
这是我用于安装协议(protocol)的代码:
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]]
注册自定义协议(protocol)时,失败确实有效,但正如所写,我不能在我的项目中使用这种方法。关于为什么这不能正常工作的任何想法?
最佳答案
首先,您的代码片段中存在打印错误,应该是 protocols
而不是 array
多变的。 ))
我认为在自定义协议(protocol)的情况下,查看协议(protocol)客户端等是有意义的(propertyFoKey: inRequest:
)
是方法startLoading
(或 stopLoading
)被调用?
啊,我已经重新阅读了你的问题。
如果是 [NSURLProtocol registerClass]
,自定义类,如果是最新注册的,将处理 URL 方案。
在您的情况下,似乎有另一个(无效)协议(protocol)来处理请求。
关于ios - 添加到 configuration.protocolClasses 的自定义 NSURLProtocol 阻止了默认 url 协议(protocol)的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30640953/