2012-11-30 15 views
5

verwenden Wenn eine PDFDocument mit einer URL initialisiert haben und es zu einem PDFView zugeordnet:PDFDocument keine benutzerdefinierten URL-Protokoll

view.document = [[[PDFDocument alloc] initWithURL: url] autorelease]; 

Die URL ist eine Datei-URL. Ich möchte die URL, die mit einem benutzerdefinierten NSURLProtocol geladen wird, überschreiben, um ein benutzerdefiniertes Entschlüsselungssystem zu unterstützen. Ich möchte die Datei-URL verwenden (im Gegensatz zum direkten Laden von NSData), da die PDFs Links zu anderen PDFs enthalten können und das Laden ohne eine URL dies nicht unterstützt.

Ich habe eine benutzerdefinierte URL-Protokoll in der AppDelegate registriert:

[NSURLProtocol registerClass: [MYURLProtocol class]]; 

Aber die +canInitWithRequest: nie aufgerufen. Ich habe versucht mit anderen (benutzerdefinierten) Schema, aber sie geben die gleichen Ergebnisse.

Beim Laden eines WebView von einer Datei URL das gleiche + canInitWithRequest: wird aufgerufen.

+0

Wie sehen die URLs aus? – trojanfoe

+0

Normale Datei-URL (Datei: //somepath/document.pdf). Ich habe auch ein benutzerdefiniertes Schema versucht. Für NSURLProtocol sollte es keine Rolle spielen, da es + canInitWithRequest in umgekehrter Reihenfolge der Registrierung aufrufen soll. – diederikh

+0

Wann rufen Sie 'registerClass' auf und haben Sie den Rückgabewert überprüft? – trojanfoe

Antwort

4

die NSURLProtocol class documentation macht es wie NSURLProtocol Subklassen mir klingen werden nur verwendet, wenn NSURLs über NSURLConnection (oder NSURLDownload) Laden:

Eine Anwendung nie direkt benötigen sollte, um eine NSURLProtocol Unterklasse instanziiert. Die Instanz der entsprechenden Unterklasse NSURLProtocol für eine NSURLRequest wird von NSURLConnection erstellt, wenn ein Download gestartet wird.

Das könnte also die Ursache des Problems sein, das Sie haben. Interessant sein, greifen Sie die Datei über eine NSURLConnection & zugeordneten NSURLRequest und sehen Sie, ob Ihre NSURLProtocol-Unterklasse wie erwartet aufgerufen wird; Ich vermute es wird sein.

+0

Ich denke, die WebView-Klasse macht das. Es sieht so aus, als ob die PDFDocument-Klasse nur den NSURL-Parameter verwendet, um die URL-Zeichenfolge abzurufen, und anschließend Core Foundation zum Laden der Datei oder http-Ressource verwendet. Ich habe es mit einem eingebetteten (sehr leichten) Webserver gelöst. – diederikh