2012-11-30 35 views
5

Nếu đã khởi tạo một PDFDocument với một địa chỉ URL và giao nó cho một PDFView:PDFDocument không sử dụng giao thức URL tùy chỉnh

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

URL là URL tập tin. Tôi muốn ghi đè tải URL bằng NSURLProtocol tùy chỉnh để hỗ trợ hệ thống giải mã tùy chỉnh. Tôi muốn sử dụng URL của tệp (trái ngược với tải NSData chuyển hướng) vì tệp PDF có thể chứa liên kết đến tệp PDF khác và tải mà không có URL sẽ không hỗ trợ điều này.

Tôi đã đăng ký một giao thức URL tùy chỉnh trong các đại biểu ứng dụng:

[NSURLProtocol registerClass: [MYURLProtocol class]]; 

Nhưng +canInitWithRequest: không bao giờ được gọi. Tôi đã thử với lược đồ (tùy chỉnh) khác nhưng chúng cho kết quả tương tự.

Khi tải WebView từ URL của tệp, cùng + canInitWithRequest: không được gọi.

+0

URL trông như thế nào? – trojanfoe

+0

URL tệp thông thường (tệp: //somepath/document.pdf). Tôi cũng đã thử một chương trình tùy chỉnh. Đối với NSURLProtocol nó không quan trọng vì nó nên gọi + canInitWithRequest theo thứ tự ngược lại của việc đăng ký. – diederikh

+0

Khi nào bạn gọi 'registerClass' và bạn đã kiểm tra giá trị trả về của nó chưa? – trojanfoe

Trả lời

4

các NSURLProtocol class documentation làm cho nó âm thanh với tôi như lớp con NSURLProtocol chỉ được sử dụng khi tải NSURLs qua NSURLConnection (hoặc NSURLDownload):

Đơn không bao giờ nên cần phải trực tiếp nhanh chóng một lớp con NSURLProtocol. Ví dụ về lớp con NSURLProtocol thích hợp cho NSURLRequest được tạo bởi NSURLConnection khi bắt đầu tải xuống.

Vì vậy, đó có thể là nguyên nhân gốc rễ của sự cố bạn đang gặp phải. Hãy thú vị lấy tệp qua NSURLConnection & NSURLRequest được liên kết và xem liệu lớp con NSURLProtocol của bạn có được gọi là bạn mong đợi hay không; Tôi nghi ngờ nó sẽ được.

+0

Tôi nghĩ rằng lớp WebView thực hiện điều này. Có vẻ như lớp PDFDocument chỉ sử dụng tham số NSURL để lấy chuỗi URL và sau đó sử dụng Core Foundation để tải tệp hoặc tài nguyên http. Tôi đã giải quyết nó bằng cách sử dụng một máy chủ web nhúng (rất nhẹ). – diederikh

Các vấn đề liên quan