2013-01-16 10 views
6

आप एक प्रारूप में NSDocument को किसी अन्य प्रारूप में NSDocument में कैसे निर्यात करते हैं?मैक ऐप में निर्यात NSDocument

मैं अपने दस्तावेज़-आधारित ऐप में विशिष्ट निर्यात विकल्प को लागू करना चाहता हूं। मुझे यकीन नहीं है कि मुझे प्रारूप रूपांतरण कोड कहां रखना चाहिए, और कोको द्वारा पहले से प्रदान किया गया है।

उत्तर

7

NSDocument में सभी लेखन विकल्प एक फ़ाइल को टाइप करने के लिए एक स्ट्रिंग पैरामीटर प्राप्त करें जो लिखा जाना चाहिए। तो आपके dataOfType:error: या fileWrapperOfType:error: विधियों में आपको प्रत्येक फ़ाइल प्रकार के लिए रूपांतरण कोड लागू करना चाहिए जिसे आप समर्थन देना चाहते हैं।

अपने निर्यात ऑपरेशन को शुरू करने के लिए आप वांछित प्रकार के साथ saveToURL:ofType:forSaveOperation:completionHandler: विधि का उपयोग कर सकते हैं और NSSaveToOperation के एक सेव ऑपरेशन का उपयोग कर सकते हैं।

दस्तावेज़ डेटा लोड करने और सहेजने के समर्थन के लिए ओवरराइड करने के तरीकों के बारे में अधिक जानकारी के लिए this programming guide पर एक नज़र डालें।

आप कक्षा विधि writableTypes या उदाहरण विधि writableTypesForSaveOperation: से उपलब्ध प्रकारों को फिर से प्राप्त कर सकते हैं, फिर NSSaveToOperation के साथ।

फ़ाइल प्रकार जिन्हें आप समर्थन देना चाहते हैं, को अपनी Info.plist फ़ाइल में घोषित करने की आवश्यकता है।

+0

क्या इसका मतलब यह है कि प्रत्येक प्रकार के लिए अलग-अलग उप-वर्ग होने की अनुशंसा नहीं की जाती है? – hpique

+1

बिल्कुल। आपके 'एनएसडी दस्तावेज़' वर्ग को ऑन-डिस्क फ़ाइल प्रारूप से स्वतंत्र एक निश्चित प्रकार का दस्तावेज़ (एक टेक्स्ट दस्तावेज़, एक चित्र, ...) का प्रतिनिधित्व करना चाहिए। – Sven

+0

प्रलेखन (आपके द्वारा प्रदान किया गया एक ही लिंक) में "एकाधिक दस्तावेज़ प्रकार एकाधिक NSDocument सबक्लास का उपयोग करें" नामक एक अनुभाग है। इससे मैं आपको केवल एक ही प्रकार के एनएसडी दस्तावेज़ सबक्लास का समर्थन करना चाहिए। – hpique

1

यदि आपका एनएसडी दस्तावेज़ सबक्लास इन-प्लेस ऑटोसविंग का समर्थन करता है, और सभी लिखने योग्य प्रकार भी पठनीय (जैसा कि होना चाहिए) हैं, तो मैं पहले से प्रदत्त प्रकार-रूपांतरण वर्कफ़्लो का उपयोग करने की अनुशंसा करता हूं, जहां उपयोगकर्ता को "डुप्लिकेट" का उपयोग करना चाहिए "सहेजें" द्वारा।

इस वर्कफ़्लो में, जब उपयोगकर्ता दस्तावेज़ को "डुप्लिकेट" करता है, तो इसे एक अस्थायी फ़ाइल के रूप में लिखा/कॉपी किया जाता है (जहां स्वत: सहेजी गई फ़ाइलें सहेजी जाती हैं) एक शीर्षक रहित दस्तावेज़ के रूप में। जब उपयोगकर्ता दस्तावेज़ विंडो बंद कर देता है, तो ऐप उसे दस्तावेज़ को सहेजने या हटाने के लिए सुझाव देता है। चूंकि दस्तावेज़ में अभी तक कोई स्थायी URL नहीं है, इसलिए एक NSSavePanel एक एक्सेसरी व्यू के साथ दिखाई देगा जो उपयोगकर्ता को दस्तावेज़ प्रकार का चयन करने देता है।

इस समाधान में सब कुछ पहले से ही कोको द्वारा प्रदान किया गया है और आपको विशेष "निर्यात" कार्यक्षमता का समर्थन करने के लिए कुछ भी करने की ज़रूरत नहीं है क्योंकि उपयोगकर्ता "सहेजें" के बाद "डुप्लिकेट" का उपयोग कर सकता है। typeName तर्क (जैसा कि स्वेन ने कहा) के अनुसार आपको केवल dataOfType:error: से fileWrapperOfType:error: में अपने दस्तावेज़ को सभी लिखने योग्य प्रकारों में सहेजने में सक्षम होना चाहिए।

यहां का लाभ यह है कि उपयोगकर्ता को फ़ाइल को बंद करने के दौरान ही यूआरएल चुनना होता है (और इसे हटाने के लिए चुनता नहीं है) - और दस्तावेज़-आधारित ऐप्स में नए वर्कफ़्लो के साथ संगत है जहां "के रूप में सहेजें" ऑपरेशन "डुप्लिकेट" के बाद "सेव" द्वारा प्रतिस्थापित किया गया है।

ध्यान दें कि आपको यह भी सुनिश्चित करना होगा कि आप गैर-लेखन योग्य दस्तावेज़ों के दस्तावेज़ों को डुप्लिकेट कर सकते हैं (आप इसे writeSafelyToURL:ofType:forSaveOperation:error: का उपयोग करने के बजाय मूल फ़ाइल की प्रतिलिपि बनाकर प्राप्त कर सकते हैं)।

संबंधित मुद्दे