2010-07-28 7 views
2

J'essaie d'ajouter UTI pour une paire de types de fichiers, correspondant par extension. Je pense que je l'ai configuré correctement - à tout le moins, l'extension de fichier -> UTI mapping est reconnu (je l'ai déclaré comme un type importé dans info.plist). Cependant, lorsque j'essaie de retirer l'UTI de mon fichier de test, je récupère un UTI dynamique. Voici l'exemple de code que je utilise pour tester ces deux cas:Affectation UTI au type de fichier

NSString *previewTypeUTI = nil; 
NSURL *previewFileURL = [NSURL fileURLWithPath:@"/Users/eblair/Desktop/EWF/thetestfile.myext1"]; 

[previewFileURL getResourceValue:&previewTypeUTI forKey:NSURLTypeIdentifierKey error:nil]; 
NSLog(@"%@", previewTypeUTI); // #1 
NSString *testUTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)[previewFileURL pathExtension], NULL); 
NSLog(@"%@", testUTI);   // #2 
[testUTI release]; 

NSLog # 1 imprime "dyn ########." Et NSLog # 2 imprime « com.mycompany.filetype1 ". Je me serais attendu à ce qu'ils impriment la même chose. Existe-t-il une étape supplémentaire pour faire fonctionner le mappage fichier-> UTI ou est-ce un cas de lancement des services de lancement? Le simple fait d'utiliser le mappage extension-> UTI n'est pas une option car je veux utiliser certaines API qui tirent parti des UTIs et ces API semblent utiliser le mappage file-> UTI.

Par souci d'exhaustivité, voici l'entrée plist pour les types importés:

<key>UTImportedTypeDeclarations</key> 
<array> 
    <dict> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>public.disk-image</string> 
     </array> 
     <key>UTTypeDescription</key> 
     <string>File Type 1</string> 
     <key>UTTypeIdentifier</key> 
     <string>com.mycompany.filetype1</string> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> 
      <array> 
       <string>myext1</string> 
      </array> 
     </dict> 
    </dict> 
    <dict> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>public.disk-image</string> 
     </array> 
     <key>UTTypeDescription</key> 
     <string>File Type 2</string> 
     <key>UTTypeIdentifier</key> 
     <string>com.mycompany.filetype2</string> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> 
      <array> 
       <string>myext2</string> 
      </array> 
     </dict> 
    </dict> 
</array> 

Répondre

7

Eh bien, il a été près d'un an, mais je devais re adresse aujourd'hui et je pense que je suis tombé sur ce que j'ai mal fait. Il semble que vous deviez inclure public.data comme type auquel vous vous conformez, même si public.disk-image est déjà conforme à public.data. Ainsi, le tableau UTTypeConformsTo devrait ressembler à ceci:

<key>UTTypeConformsTo</key> 
    <array> 
     <string>public.data</string> 
     <string>public.disk-image</string> 
    </array> 

Après avoir fait ce changement, ma comparaison ci-dessus de la Fichier-> UTI et extension-> UTI maintenant donné le même résultat.

Questions connexes