ios - 添加到 configuration.protocolClasses 的自定义 NSURLProtocol 阻止了默认 url 协议(protocol)的工作

标签 ios nsurlprotocol

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

出于某种原因,当我的自定义协议(protocol)通过返回 true 接受请求时,我的设置确实提供了测试数据。对于canInitWithRequest调用,但对于所有其他请求(当它返回 false 时)仍然在 protocolClasses 中的默认协议(protocol)在我的自定义协议(protocol)后面获取请求,甚至返回 truecanInitWithRequest调用,但他们从不将请求发送到互联网 并在 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/

相关文章:

ios - 场景暂停时 GameplayKit 不暂停

ios - 此应用无法通过在中国激活的 CallKit 功能获得批准。请进行适当的更改并重新提交此应用以供审核

ios - 注册 NSURLProtocol (URLProtocol) 类以与外部应用程序一起使用?

ios - 什么时候使用 NSURLProtocol?

ios - CDVURLProtocol - 触发 ajax 调用时未执行 startLoading 方法

iphone - 如何在 UIViewController 上没有 NavigationController 的情况下推送 DetailView

ios - UITextView,sizeToFit 不起作用

iphone - 带有本地镜像文件的 iOS WebView 远程 html

ios - NSURLProtocol 使用 AJAX 超时

ios - 低能耗模式