2011-08-29 71 views
3

我的Cocoa(Mac)應用程序處理的文件格式沒有標準化的文件擴展名,我從用戶收到的頭號請求是允許打開任何文件擴展名的文件,而不僅僅是這是我準備的最常見的一套封閉的一套。在Cocoa中打開任何文件

通常您可以通過聲明您的類處理的UTI並根據需要聲明導入或導出的UTI來指定要在Info.plist中打開的文件類型。您可以在那裏指定將與這些UTI關聯的文件擴展名列表。帶有未在列表中列出的擴展名的文件將不會被拖放到擴展塢中的應用程序圖標中,並會在「打開文件」對話框中變爲灰色。我似乎無法找到一種方法來覆蓋此行爲並接受具有任何擴展名的文件。互聯網上有各種網站建議將*分配給文件擴展名,但這似乎不適用於我。

在Mac App Store中有許多Cocoa應用程序可以做到這一點,其中一些來自Apple(如Xcode),一些由第三方開發人員(TextWrangler)製作,因此我認爲必須有合法的方式做到這一點。

TLDR:如何接受Cocoa中任何擴展名的文件?

回答

2

我在我的一個應用程序中設置了此設置。它被定義爲Info.plist鍵'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> 

但您可能需要修改該值。

+0

非常感謝,它做到了!爲了將來的參考,我缺少的一點是,在LSItemContentTypes列表中,我引用了系統預定義的UTI並且似乎限制了擴展。 –

+0

在我的信息plist中使用相同的。應用在所有其他應用中顯示其他照片。你能幫我,爲什麼它不在那裏。 –