如何在plist文件中定义统一类型标识符?

时间:2011-09-05 15:55:33

标签: objective-c drag-and-drop mime-types uti

我的应用程序使用以下NSApplicationDelegate函数。

- (void)application:(NSApplication*)sender openFiles:(NSArray*)filenames;

我想使用此功能让用户将图像文件拖放到停靠栏中的应用程序图标上。

如何在plist文件中定义某些文件类型以限制它们成为图像?我发现结构必须看起来像这样。

// plist file contents taken from Preview.app
[...]
<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFile</key>
        <string>jpeg.icns</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSIsAppleDefaultForType</key>
        <true/>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.jpeg</string>
        </array>
        <key>NSDocumentClass</key>
        <string>PVDocument</string>
    </dict>
</array>

我将其添加到plist文件中,但它不起作用。弹出窗口显示以下错误消息。

  

无法打开文档“test.jpg”。 MyApp无法打开文件   以“JPEG图像”格式。

此外,我在in the documentation读到了public.image这就是我想要定义的内容。

同时,如果我使用“创建基于文档的应用程序”选项创建Cocoa应用程序,我发现plist文件只包含键CFBundleDocumentTypes。您能否澄清该选项存在哪些依赖关系?

2 个答案:

答案 0 :(得分:2)

    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>png</string>
                <string>jpg</string>
                            ... add as many types as you need
            </array>
                    ... other keys
        </dict>
    </array>

更新:在Mac OS X v10.5中不推荐使用CFBundleDocumentTypes键。应该使用新的密钥LSItemContentTypes。这些项目是UTI字符串:

<key>LSItemContentTypes</key>
<array>
    <string>public.png</string>
</array>

答案 1 :(得分:0)

如果您的文档类型是常见类型,则可以使用UTI's About UTI's