获取与NSURLRequest关联的NSURLConnection

时间:2017-11-06 12:51:47

标签: ios objective-c nsurlconnection nsurlrequest

我一直在使用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;
}

1 个答案:

答案 0 :(得分:0)

IIRC,您通过调用NSURLProtocolClient协议中NSURLProtocol子类client属性中任何对象的方法,与原始连接或会话进行通信。对象本身可能是NSURLConnectionNSURLSession机制的一部分,具体取决于请求的启动方式,但不管怎样,您都调用相同的方法。

例如,您可能想要调用它:

- (void)URLProtocol:(NSURLProtocol *)protocol 
   didFailWithError:(NSError *)error;

有关详细信息,请参阅Apple的NSURLProtocolClient Protocol Reference