بالنظر إلى المعرف الموحد (المعرف الموحد) ، ابحث عن جميع الأنواع التي تتوافق معها

StackOverflow https://stackoverflow.com/questions/3903953

سؤال

أنا أكتب تطبيقًا يستخدم معرفات النوع الموحد. على وجه التحديد ، أنا أتصل UTTypeCreateAllIdentifiersForTag() وتمريره مختلفًا التمحور الأنواع.

كان أملي أن هذه الوظيفة (متميزة عن UTTypeCreatePreferredIdentifierForTag()) من شأنه أن يعطيني أكثر التهاب المسالك البولية وكذلك جميع التهاب المسالك البولية التي تتوافق معها. يبدو أن هذا ليس هو الحال - إما أنه يعيد التهاب المسالك البولية واحدة ، أو أن التهاب المسالك البولية الثانوية زائفة.

هنالك ال UTTypeConformsTo() الوظيفة المحددة في نفس ملف الرأس ، لكنني أفضل وظيفة تُرجع مجموعة من جميع الأنواع التي يتوافق معها هذه التهاب المسالك البولية.

يبدو أن هناك أمل بالنسبة لي MDItemCopyAttributeList() سيعود مثل هذه القائمة. ومع ذلك ، يتطلب الأمر MDItemRef, ، والتي يمكن إنشاؤها من مسار الملف أو عنوان URL - وهو أمر غير رائع. في بعض الأحيان ، يتم تخزين بياناتي فقط في الذاكرة ولدي فقط نوع التمرير.

هل يجب علي التكرار من خلال قاعدة بيانات التهاب المسالك البولية بأكملها للحصول على هذه المعلومات أم أفتقد شيئًا؟

هل كانت مفيدة؟

المحلول

كنت في عداد المفقودين بالفعل شيء: الحل الواضح للغاية. بينما كنت أتجول في الرموز التي تم تصديرها بواسطة LaunchServices (ولاحظت المثير للاهتمام ، ولكن خاص UTTypeCopyPedigree()) ، تم تذكيرني بـ UTTypeCopyDeclaration(), ، أيّ هو مُعرف.

UTTypeCopyDeclaration() يتم إعطاء التهاب المسالك البولية والعودة (كـ CFDictionaryRef) قائمة الممتلكات التي تم فيها تعريف التهاب المسالك البولية. الكائن في هذا القاموس مع المفتاح kUTTypeConformsToKey هو إما CFArrayRef أو CFStringRef. في حالة صفيف ، يمكن للمرء أن يتكرر بشكل متكرر حتى يتم الوصول إلى نوع أساسي.

هذه هي الطريقة التي بنيت بها شجرة ميراث لأعطال التهاب المسالك البولية. آمل أن يساعد هذا أي شخص آخر بنفس القضية.

نصائح أخرى

https://github.com/nst/utisexplorer يولد رسم بياني للتسلسل الهرمي لتنسيق "DOT" لـ GraphViz.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top