2010-10-11 10 views
6

के अनुरूप सभी प्रकारों को ढूंढें, मैं एक ऐसा एप्लीकेशन लिख रहा हूं जो Uniform Type Identifiers का उपयोग करता है। विशेष रूप से, मैं UTTypeCreateAllIdentifiersForTag() पर कॉल कर रहा हूं और इसे विभिन्न MIME प्रकारों को पास कर रहा हूं।एक यूटीआई (वर्दी टाइप आइडेंटिफायर) को देखते हुए,

मेरे आशा थी कि इस समारोह (UTTypeCreatePreferredIdentifierForTag() से अलग) मुझे सबसे विशिष्ट यूटीआई देना होगा और साथ ही सभी के रूप में यूटीआई जो यह अनुरूप करने के लिए। ऐसा लगता है कि यह मामला नहीं है - यह या तो एक यूटीआई देता है, या माध्यमिक यूटीआई नकली हैं।

एक ही शीर्षलेख फ़ाइल में परिभाषित UTTypeConformsTo() फ़ंक्शन है, लेकिन मैं एक ऐसा फ़ंक्शन पसंद करूंगा जो इस यूटीआई के अनुरूप सभी प्रकारों की एक सरणी लौटाए।

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

क्या मुझे यह जानकारी प्राप्त करने के लिए यूटीआई के पूरे डेटाबेस के माध्यम से पुन: प्रयास करना है या क्या मुझे कुछ याद आ रहा है?

उत्तर

7

मुझे वास्तव में कुछ याद आ रहा था: बहुत स्पष्ट समाधान। जबकि मैं LaunchServices द्वारा निर्यात किए गए प्रतीकों के माध्यम से घूम रहा था (और दिलचस्प, लेकिन निजी UTTypeCopyPedigree() देखा), मुझे UTTypeCopyDeclaration() की याद दिलाई गई, जो परिभाषित है।

UTTypeCopyDeclaration() को यूटीआई दिया जाता है और रिटर्न (CFDictionaryRef के रूप में) संपत्ति सूची जिसमें यूटीआई परिभाषित किया गया था। कुंजी kUTTypeConformsToKey के साथ इस शब्दकोश में ऑब्जेक्ट या तो CFArrayRef या CFStringRef है। किसी सरणी के मामले में, कोई आधार प्रकार तक पहुंचने तक पुनरावर्तक रूप से पुनरावृत्त हो सकता है।

इस प्रकार मैंने किसी दिए गए यूटीआई के लिए विरासत वृक्ष का निर्माण किया। मुझे आशा है कि यह किसी भी मुद्दे के साथ किसी और की मदद करेगा।

0

https://github.com/nst/UTIsExplorer ग्राफविज़ के लिए "डॉट" प्रारूप में यूटीआई का पदानुक्रम ग्राफ उत्पन्न करता है।