2012-11-30 2 views
5

을 사용하지 않습니다PDFDocument 사용자 정의 URL 프로토콜

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

URL은 파일의 URL입니다. 사용자 지정 암호 해독 시스템을 지원하기 위해 사용자 지정 NSURLProtocol URL 로딩을 덮어 쓰려고합니다. PDF 파일에 다른 PDF 파일에 대한 링크가 포함될 수 있고 URL없이로드하면이 기능을 지원하지 않기 때문에 파일 URL을 사용하고 싶습니다 (NSData를 리디렉션 방식으로로드하는 것과 반대).

나는 앱 위임에서 사용자 지정 URL 프로토콜 등록 :

[NSURLProtocol registerClass: [MYURLProtocol class]]; 

을하지만 +canInitWithRequest:는 호출되지 않습니다. 다른 (사용자 정의) 스키마로 시도했지만 동일한 결과를 제공합니다.

파일 URL에서 WebView를로드 할 때 동일한 + canInitWithRequest :가 호출됩니다.

+0

URL의 모습은 무엇입니까? – trojanfoe

+0

일반 파일 URL (file : //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 리소스를로드하는 것처럼 보입니다. 나는 임베디드 (아주 가벼운) 웹 서버를 사용하여 그것을 해결했다. – diederikh