我一直在使用Ray Wenderlich的this tutorial围绕自定义NSURLProtocols。我有一个场景,我正在拦截特定的NSURLRequests(称之为'请求a')并触发另一个请求('请求b')。对于第二个请求(b)失败的情况,我希望能够取消原始请求(a),此时它只是在一段时间后超时,但我想要更多的控制并立即失败它。
在自定义NSURLProtocol中,我正在使用截获的NSURLRequest(请求a)为请求b创建新的NSURLConnection,但是有人知道是否可以获得对触发该请求的原始NSURLConnection的引用?如果后续请求b调用失败,这将允许我取消它吗?
编辑:
NSURLConnection委托方法都不允许我访问原始NSURLConnection对象,因为我的示例中的self.connection将与'request b'相关,而不是原始请求
请参阅下面的示例委托方法:
- (void)startLoading {
self.connection = [NSURLConnection connectionWithRequest:self.request
delegate:self];
}
- (void)stopLoading {
[self.connection cancel];
self.connection = nil;
}
答案 0 :(得分:0)
NSURLProtocolClient
协议中NSURLProtocol
子类client
属性中任何对象的方法,与原始连接或会话进行通信。对象本身可能是NSURLConnection
或NSURLSession
机制的一部分,具体取决于请求的启动方式,但不管怎样,您都调用相同的方法。
例如,您可能想要调用它:
- (void)URLProtocol:(NSURLProtocol *)protocol
didFailWithError:(NSError *)error;
有关详细信息,请参阅Apple的NSURLProtocolClient Protocol Reference。