2011-08-29 7 views
3

Mon application Cocoa (Mac) traite un format de fichier qui n'a pas d'extension de fichier standardisée et la première demande que je reçois de mes utilisateurs est de permettre l'ouverture de fichiers avec n'importe quelle extension de fichier, pas seulement un ensemble fermé des plus communs que j'ai préparés.Ouvrir un fichier dans Cocoa

Normalement, vous spécifiez le type de fichiers que vous souhaitez ouvrir dans Info.plist en déclarant les UTI que vos classes gèrent et en déclarant les UTI importées ou exportées selon les besoins. Vous pouvez spécifier une liste d'extensions de fichiers qui seront associées à ces UTI. Les fichiers dont les extensions ne sont pas listées ne seront pas droppables sur l'icône de votre application dans votre dock et seront grisés dans la boîte de dialogue Ouvrir un fichier. Je n'arrive pas à trouver un moyen de contourner ce comportement et d'accepter les fichiers avec des extensions. Il existe plusieurs sites sur Internet qui suggèrent d'attribuer * à l'extension de fichier, mais cela ne semble pas fonctionner pour moi. Il y a un certain nombre d'applications Cocoa dans le Mac App Store qui peuvent le faire, certaines d'Apple (par exemple Xcode), d'autres faites par des développeurs tiers (TextWrangler) donc je suppose qu'il doit y avoir un moyen légitime de atteindre cet.

TLDR: Comment accepter des fichiers avec n'importe quelle extension dans Cocoa?

Répondre

2

Je l'ai mis en place dans une de mes applications. Il est défini avec la valeur suivante pour Info.plist clés « CFBundleDocumentTypes »:

<array> 
     <dict> 
      <key>CFBundleTypeExtensions</key> 
      <array> 
       <string>*</string> 
      </array> 
      <key>CFBundleTypeMIMETypes</key> 
      <array> 
       <string>public.item</string> 
      </array> 
      <key>CFBundleTypeOSTypes</key> 
      <array> 
       <string>****</string> 
      </array> 
      <key>CFBundleTypeRole</key> 
      <string>Viewer</string> 
      <key>LSItemContentTypes</key> 
      <array> 
       <string>public.item</string> 
      </array> 
      <key>LSTypeIsPackage</key> 
      <false/> 
      <key>NSDocumentClass</key> 
      <string>MONDocumentClass</string> 
     </dict> 
    </array> 

mais vous devrez peut-être modifier cela.

+0

Merci beaucoup, ça l'a fait! Pour référence future, le bit qui me manquait était que dans la liste LSItemContentTypes je référençais une UTI prédéfinie par le système et qui semblait contraindre les extensions. –

+0

Utilisez la même chose dans mon info plist. App est montrant dans toutes les autres applications autres que les photos. Pouvez-vous s'il vous plaît m'aider pourquoi ce n'est pas là. –