2017-11-06 22 views
0

私は、カスタムNSURLProtocolsの周りのRay Wenderlichからthis tutorialまで実行しています。私は特定のNSURLRequests(それらを '要求a'と呼ぶ)と別の要求( '要求b')を撃退するシナリオを持っています。この2番目のリクエスト(b)が失敗するシナリオでは、元のリクエスト(a)を取り消すことができるようにしたいのですが、一定期間後にタイムアウトした瞬間ですが、それ。NSURLRequestに関連付けられたNSURLConnectionを取得します。

カスタムNSURLProtocol内で、傍受されたNSURLRequest(リクエストa)を使用してリクエストb用の新しいNSURLConnectionを作成していますが、そのリクエストを発生させた元のNSURLConnectionへの参照を取得できるかどうかは知っていますか?これにより、後続のリクエストbコールが失敗した場合にキャンセルできます。

編集:私の例ではself.connectionは「リクエストB」に関係しますので、NSURLConnectionのデリゲートメソッドの

なし、私の元のNSURLConnectionオブジェクトへのアクセス権を与えないだろう、いない元の要求

参照してください。以下の例のデリゲートメソッド:

- (void)startLoading { 
    self.connection = [NSURLConnection connectionWithRequest:self.request 
delegate:self]; 
} 

- (void)stopLoading { 
    [self.connection cancel]; 
    self.connection = nil; 
} 
+0

実装に関連するコードスニペットを追加できますか? –

+1

*このチュートリアル*はほぼ4歳で、APIは古くなっています。 – vadian

+0

これは、NSURLConnectionを使用することができないことを意味しますか?私はNSURLSessionが好意的なアプローチであることを認識していますが、チュートリアルをたどっているだけです。NSURLSessionを使用して改訂版があるかどうかわかりません。 –

答えて

0

はIIRC、あなたはどんなオブジェクトにNSURLProtocolClientプロトコルのメソッドを呼び出すことにより、元の接続またはセッションと通信あなたであります3210サブクラスのclientプロパティ。オブジェクト自体は、要求がどのように開始されたかに応じてNSURLConnectionまたはNSURLSessionマシンの一部である可能性がありますが、どちらの方法でも同じメソッドを呼び出します。

たとえば、あなたはおそらく、このいずれかを呼び出したい:

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

は、AppleのNSURLProtocolClient Protocol Reference詳細についてを参照してください。

+0

ありがとうございました。私はスレッディングに関する問題を抱えていました。私の呼び出しが失敗していて、このデリゲートメソッドに行っても、元の要求がタイムアウトしていて、ただちに失敗していないのに、私は見つかったはずですこれは、Xcodeのスレッドデバッガビューからすぐに、次回にわかります! :)ありがとう! –

関連する問題