2012-11-30 72 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