NSURLSessionConfiguration::protocolClasses
の文書によると、私のカスタムURLプロトコルが使用される保証はありません。 protocolClasses
プロパティに設定するたびに、どのように使用されるのかをどうすれば保証できますか?私のカスタムURLプロトコルが使用されていることを確認するにはどうすればいいですか?
要求を処理する前に、NSURLSessionオブジェクトが最初 デフォルトのプロトコルを検索し、 は、指定された要求を処理することができるものを見つけ、それまでは、カスタム・プロトコルをチェックします。それは プロトコルを使用します。このプロトコルでは、canInitWithRequest:classメソッドがYESを返します。 は、クラスが指定された リクエストを処理できることを示します。
ロジックがcanInitWithRequest:
メソッドであり、すべてのリクエストを処理できないため、単一URLプロトコルで配列を設定できません。
NSArray *currentProtocolClasses = sessionConfiguration.protocolClasses ?: @[];
NSMutableArray *protocolClasses = [NSMutableArray arrayWithArray:currentProtocolClasses];
[protocolClasses insertObject:[CustomURLProtocol class] atIndex:0];
sessionConfiguration.protocolClasses = protocolClasses;
こんにちは!より包括的にするために、サンプルコードを 'sessionConfiguration.protocolClasses = @ [[CustomURLProtocol class]];に変更してください。ありがとう – JastinBall
ええ、確かに。完了しました。 – dgatwood
"配列は常に空またはnil"について:私はデフォルトのsessionConfigurationを作成します。そのprotocolClasses配列はすでに5つのOSプロトコルを含んでいます: '_NSURLHTTPProtocol'、' _NSURLDataProtocol'、 '_NSURLFTPProtocol'、' _NSURLFileProtocol'、 'NSAboutURLProtocol'。私は 'CustomURLProtocol'を追加する必要があります。私の 'CustomURLProtocol'が' canInitWithRequest: 'にNOを返すときはいつでも、アプリケーションはOSプロトコルにフォールバックする必要があります。 – JastinBall