2012-11-30 14 views
5

Se hanno inizializzato un PDFDocument con un URL e assegnato ad un PDFView:PDFDocument non usa il protocollo URL personalizzato

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

L'URL è un URL di file. Voglio sovrascrivere il caricamento dell'URL con un NSURLProtocol personalizzato per supportare un sistema di decrittografia personalizzato. Desidero utilizzare l'URL del file (invece di caricare NSData in modo ridondante) perché i PDF possono contenere collegamenti ad altri PDF e il caricamento senza un URL non lo supporterà.

Ho registrato un protocollo URL personalizzato nel delegato app:

[NSURLProtocol registerClass: [MYURLProtocol class]]; 

Ma la +canInitWithRequest: non viene mai chiamato. Ho provato con altri schemi (personalizzati) ma danno gli stessi risultati.

Quando si carica una WebView da un URL di file, lo stesso + canInitWithRequest: viene chiamato.

+0

Che aspetto hanno gli URL? – trojanfoe

+0

URL file regolare (file: //somepath/document.pdf). Ho anche provato uno schema personalizzato. Per NSURLProtocol non dovrebbe avere importanza in quanto dovrebbe chiamare + canInitWithRequest in ordine inverso di registrazione. – diederikh

+0

Quando chiami 'registerClass' e hai controllato il suo valore di ritorno? – trojanfoe

risposta

4

il NSURLProtocol class documentation rende il suono a me come sottoclassi NSURLProtocol vengono utilizzati solo per il caricamento tramite NSURLs NSURLConnection (o NSURLDownload):

Un'applicazione dovrebbe mai bisogno di istanziare direttamente una sottoclasse NSURLProtocol. L'istanza della sottoclasse NSURLProtocol appropriata per NSURLRequest viene creata da NSURLConnection all'avvio del download.

Questa potrebbe essere la causa principale del problema riscontrato. Essere interessante afferrare il file tramite NSURLConnection & NSURLRequest associato e verificare se la sottoclasse NSURLProtocol è chiamata come previsto; Sospetto che lo sarà.

+0

Penso che la classe WebView faccia questo. Sembra che la classe PDFDocument abbia utilizzato solo il parametro NSURL per ottenere la stringa URL e quindi utilizza Core Foundation per caricare il file o la risorsa http. L'ho risolto utilizzando un server web incorporato (molto leggero). – diederikh

Problemi correlati