Как определить универсальный идентификатор типа в файле plist? - PullRequest
1 голос
/ 05 сентября 2011

Мое приложение использует следующую функцию 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-изображения».

Далее, я прочитал в документации , что есть public.image, который я бы хотел определить.

Тем временем я обнаружил, что файл plist содержит ключ CFBundleDocumentTypes, только если я создаю приложение какао с опцией «Создать приложение на основе документа».Не могли бы вы уточнить, какие зависимости существуют для опции?

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011
    <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>

Обновление: ключ CFBundleDocumentTypes устарел в Mac OS X v10.5. Вместо этого следует использовать новый ключ LSItemContentTypes. Предметами являются строки UTI:

<key>LSItemContentTypes</key>
<array>
    <string>public.png</string>
</array>
0 голосов
/ 01 августа 2013

Если ваши типы документов являются общими, вы можете использовать UTI's О UTI

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...