2012-11-30 75 views
5

如果已初始化一個URL的PDFDocument並將其分配給PDFView:PDFDocument不使用自定義URL協議

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

的URL是一個文件URL。我想用自定義NSURLProtocol覆蓋URL加載,以支持定製解密系統。 我想使用文件URL(而不是重定向加載NSData),因爲PDF可以包含指向其他PDF的鏈接,並且在沒有URL的情況下加載不會支持此操作。

我已經註冊的應用程序委託的自定義URL協議:

[NSURLProtocol registerClass: [MYURLProtocol class]]; 

+canInitWithRequest:永遠不會被調用。我嘗試過使用其他(自定義)模式,但他們給出了相同的結果。

當從文件URL加載WebView時,相同的+ canInitWithRequest:不會被調用。

+0

這些網址是什麼樣的? – trojanfoe

+0

普通文件URL(file://somepath/document.pdf)。我也嘗試過一種定製方案。對於NSURLProtocol而言,它應該不會影響,因爲它應該按照與註冊相反的順序調用+ canInitWithRequest。 – diederikh

+0

你什麼時候調用'registerClass'並檢查它的返回值? – trojanfoe

回答

4

NSURLProtocol class documentation使得它聽起來對我來說,NSURLProtocol子類加載通過NSURLConnection的(或NSURLDownload)NSURLs時才被使用:

,應用程序應該不需要直接實例化一個NSURLProtocol子類。 NSURLRequest的相應NSURLProtocol子類的實例在下載開始時由NSURLConnection創建。

因此,這可能是您遇到問題的根本原因。有趣的是通過NSURLConnection &關聯的NSURLRequest獲取文件,並查看您的NSURLProtocol子類是否按照您的預期調用;我懷疑它會是。

+0

我認爲WebView類可以做到這一點。看起來像PDFDocument類只使用NSURL參數來獲取URL字符串,然後使用Core Foundation來加載文件或http資源。我通過使用嵌入式(非常輕型)的Web服務器解決了這個問題。 – diederikh