Szenario:
Ich möchte die zulässigen Dateitypen (Inhaltstypen) in der Info.plist
Datei meiner Cocoa-Anwendung. Daher habe ich sie wie im folgenden Beispiel gezeigt hinzugefügt.
# Extract from Info.plist
[...]
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>public.png</string>
<key>CFBundleTypeIconFile</key>
<string>png.icns</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSIsAppleDefaultForType</key>
<true/>
<key>LSItemContentTypes</key>
<array>
<string>public.png</string>
</array>
</dict>
[...]
Außerdem erlaubt meine Anwendung das Öffnen von Dateien mit einem NSOpenPanel
. Das Panel ermöglicht die Einstellung der zulässigen Dateitypen über den folgenden Selektor: setAllowedFileTypes:
. その In der Dokumentation heißt es, dass UTI verwendet werden kann .
Der Dateityp kann eine gewöhnliche Dateierweiterung oder eine UTI sein.
Eine maßgeschneiderte Lösung:
Ich habe die folgende Hilfsmethode geschrieben, um die UTI aus der Datei Info.plist
Datei.
/**
Returns a collection of uniform type identifiers as defined in the plist file.
@returns A collection of UTI strings.
*/
+ (NSArray*)uniformTypeIdentifiers {
static NSArray* contentTypes = nil;
if (!contentTypes) {
NSArray* documentTypes = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDocumentTypes"];
NSMutableArray* contentTypesCollection = [NSMutableArray arrayWithCapacity:[documentTypes count]];
for (NSDictionary* documentType in documentTypes) {
[contentTypesCollection addObjectsFromArray:[documentType objectForKey:@"LSItemContentTypes"]];
}
contentTypes = [NSArray arrayWithArray:contentTypesCollection];
contentTypesCollection = nil;
}
return contentTypes;
}
Anstelle von [NSBundle mainBundle]
auch CFBundleGetInfoDictionary(CFBundleGetMainBundle())
verwendet werden können.
Fragen:
- Kennen Sie eine intelligentere Methode, um die Informationen zum Inhaltstyp zu extrahieren? aus dem
Info.plist
Datei? Gibt es eine in Cocoa eingebaute Funktion? - Wie gehen Sie mit der Definition von Ordnern um, die Folgendes enthalten können enthalten können, z.B.
public.folder
?
Nota:
Bei meinen Recherchen fand ich diesen Artikel sehr informativ: Vereinfachung der Datenverarbeitung mit einheitlichen Typbezeichnungen .