2012-11-30 11 views
5

を使用していません。カスタムの暗号化システムをサポートするために、カスタムのNSURLProtocolでURLの読み込みを上書きしたいと思います。 PDFファイルには他のPDFファイルへのリンクが含まれている可能性があり、URLを使用しない読み込みではこれをサポートしないため、ファイルURLを使用したい(NSDataをリダイレクトするのではなく)。PDFDocumentは、カスタムURLプロトコル

私はアプリデリゲートのカスタムURLプロトコルを登録している:

[NSURLProtocol registerClass: [MYURLProtocol class]]; 

をしかし+canInitWithRequest:が呼び出されることはありません。私は他の(カスタム)スキーマで試しましたが、同じ結果が得られます。

ファイルURLからWebViewをロードするとき、同じ+ canInitWithRequest:が呼び出されます。

+0

URLはどのように見えますか? – trojanfoe

+0

通常のファイルのURL(ファイル://somepath/document.pdf)。私もカスタムスキームを試しました。 NSURLProtocolについては、登録の逆の順序で+ canInitWithRequestを呼び出す必要があるので、それは重要ではありません。 – diederikh

+0

いつ 'registerClass'を呼び出して戻り値をチェックしましたか? – trojanfoe

答えて

4

NSURLProtocol class documentationは、それがNSURLConnection(またはNSURLDownload)を介してNSURLsをロードする際にのみ使用されているNSURLProtocolサブクラスのように私に聞こえる:

アプリケーションが直接NSURLProtocolサブクラスのインスタンスを作成する必要はありません。 NSURLRequestの適切なNSURLProtocolサブクラスのインスタンスは、ダウンロードが開始されるときにNSURLConnectionによって作成されます。

これは、問題の根本原因になっている可能性があります。 NSURLConnection &に関連付けられたNSURLRequestを介してファイルを取得し、期待どおりNSURLProtocolサブクラスが呼び出されているかどうかを確認してください。私はそれがされると思う。

+0

私はWebViewクラスがこれを行うと思います。 PDFDocumentクラスがNSURLパラメータを使用してURL文字列を取得した後、Core Foundationを使用してファイルまたはhttpリソースをロードするように見えます。私は埋め込まれた(非常に軽い)Webサーバーを使用して解決しました。 – diederikh