2012-11-30 22 views
5

का उपयोग नहीं करता:PDFDocument तो एक URL वाले किसी PDFDocument प्रारंभ और यह एक PDFView से असाइन की गई कस्टम URL प्रोटोकॉल

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

यूआरएल एक फ़ाइल यूआरएल है। मैं कस्टम डिक्रिप्शन सिस्टम का समर्थन करने के लिए एक कस्टम NSURLProtocol के साथ यूआरएल लोडिंग को ओवरराइट करना चाहता हूं। मैं फ़ाइल यूआरएल का उपयोग करना चाहता हूं (जैसा कि एनएसडीटा को रीडायरेक्ट लोड करने के विपरीत है) क्योंकि पीडीएफ में अन्य पीडीएफ के लिंक हो सकते हैं और यूआरएल के बिना लोडिंग इसका समर्थन नहीं करेगी।

मैं अनुप्रयोग प्रतिनिधि में एक कस्टम URL प्रोटोकॉल पंजीकृत किया है:

[NSURLProtocol registerClass: [MYURLProtocol class]]; 

लेकिन +canInitWithRequest: कभी नहीं कहा जाता है। मैंने अन्य (कस्टम) स्कीमा के साथ प्रयास किया है लेकिन वे एक ही परिणाम देते हैं।

फ़ाइल URL से वेबव्यू लोड करते समय वही + canInitWithRequest: कॉल किया जाता है।

+0

यूआरएल क्या दिखते हैं? – trojanfoe

+0

नियमित फ़ाइल यूआरएल (फ़ाइल: //somepath/document.pdf)। मैंने एक कस्टम योजना भी कोशिश की है। NSURLProtocol के लिए यह कोई फर्क नहीं पड़ता क्योंकि इसे पंजीकरण के विपरीत क्रम में + canInitWithRequest को कॉल करना चाहिए। – diederikh

+0

आप 'registerClass' कब कॉल करते हैं और आपने अपना रिटर्न वैल्यू चेक किया है? – trojanfoe

उत्तर

4

NSURLProtocol class documentation यह NSURLProtocol उपवर्गों केवल उपयोग किया जाता है जब NSURLConnection (या NSURLDownload) के माध्यम से NSURLs लोड करने की तरह मेरे लिए ध्वनि बनाता है:

एक आवेदन सीधे एक NSURLProtocol उपवर्ग का दृष्टांत की जरूरत कभी नहीं करना चाहिए। एक NSURLRequest के लिए उचित NSURLProtocol उपclass का उदाहरण NSURLConnection द्वारा डाउनलोड किया गया है जब डाउनलोड प्रारंभ होता है।

तो यह आपके मुद्दे के मूल कारण हो सकता है। NSRLConnection & संबंधित NSURLRequest के माध्यम से फ़ाइल को दिलचस्प रूप से पकड़ें और देखें कि आपके NSURLProtocol subclass को आप अपेक्षा करते हैं या नहीं; मुझे संदेह है कि यह होगा।

+0

मुझे लगता है कि वेबव्यू क्लास यह करता है। ऐसा लगता है कि पीडीएफ डॉक्यूमेंट क्लास ने URL स्ट्रिंग प्राप्त करने के लिए केवल NSURL पैरामीटर का उपयोग किया था और फिर फ़ाइल या http संसाधन लोड करने के लिए कोर फाउंडेशन का उपयोग करता था। मैंने इसे एक एम्बेडेड (बहुत हल्का) वेब सर्वर का उपयोग करके हल किया है। – diederikh