Перетаскивание файлов на значок док-станции в Какао

Как я могу перетащить файл (или выбрать его открытие в Finder) типа, указанного в Info.plist, на значок в доке, а затем вызвать метод с полным путем к файлу?


person Tristan    schedule 22.03.2010    source источник
comment
Я не понимаю вопроса. Перетаскивает ли пользователь файл на значок в доке или вы хотите открыть файл программно?   -  person Peter Hosey    schedule 22.03.2010
comment
Я хочу получить путь к файлу, который был перетащен на значок док-станции.   -  person Tristan    schedule 22.03.2010


Ответы (5)


Если вы настроили свой Info.plist в массив CFBundleDocumentTypes (либо 'LSItemContentTypes' или 'CFBundleTypeExtensions'), тогда вам просто нужно настроить делегат NSApplication и реализовать метод делегата, application: openFile:.

Если вы ожидаете одновременного удаления нескольких файлов, реализуйте application: openFiles:.

Для обещанных файлов (_1 _ / _ 2_) см. Удаление обещанных файлов на значок приложения в Dock.

person Josh Freeman    schedule 22.03.2010
comment
Я правильно настроил свой массив CFBundleDocumentTypes и написал метод, но значок док-станции просто не примет мой файл. - person Tristan; 22.03.2010
comment
Тристиан Зайферт: Одна из возможных причин этой проблемы заключается в том, что вы указали UTI в своем списке, но он оказался неправильным: boredzo.org/blog/archives/2007-07-23/ Вы также должны импортировать любые UTI, которые вы упомянуть в списке: developer.apple.com/mac/library/ документация / FileManagement / - person Peter Hosey; 22.03.2010
comment
После прочтения этих двух документов я все еще не совсем понимаю, как добавить UTI в мой существующий PList. Вот небольшой раздел моего Info.plist: ‹dict› ‹key› CFBundleTypeIconFile ‹/key› ‹string› Draft.icns ‹/string› ‹key› CFBundleTypeExtensions ‹/key› ‹array› ‹string› podraft ‹/ string ›‹/Array› ‹key› CFBundleTypeName ‹/key› ‹string› Черновик почтового отделения ‹/string› ‹/dict› Что мне нужно добавить к этому определению, чтобы док-станция приняла файл? - person Tristan; 23.03.2010
comment
Finder автоматически открывает файлы с моим приложением, но док-станция по-прежнему не работает после того, как я удалил папку сборки и перестроил. - person Tristan; 23.03.2010
comment
Обратите внимание, что если вы реализуете в своем делегате как openFile:, так и openFiles:, тогда openFiles: всегда будет вызываемым методом, даже если есть только один файл, перетаскиваемый на значок. - person Chris Markle; 13.09.2012
comment
У меня это не сработало, пока я не сделал сборку релиза и не поместил приложение в папку Applications. После этого он начал работать над сборкой и запуском отладочных сборок в XCode. - person borisgolovnev; 16.07.2018
comment
Независимо от того, что я делаю, я не могу заставить значок док-станции принять падение. - person Erik Aigner; 25.12.2018
comment
То, что сказал @borisgolovnev, имеет большое значение. Это не сработает, пока вы не поместите пакет приложения в папку Applications. Это сработало, когда я скопировал свой пакет приложения в папку Applications. И я не уверен, что будет, если я удалю пакет приложения из папки Applications. - person eonil; 19.07.2020
comment
IMO нет хорошего способа немедленно проверить это поведение. - person eonil; 19.07.2020

Вот обновленное решение для Xcode 5. В AppDelegate.m

-(BOOL)application:(NSApplication *)sender openFile:(NSString *)filename
{
    NSLog(@"%@", filename);
    return YES;
}

И в настройках Xcode Document Types в Project> Targets> Info: Project› Info ›Document Types

Проверьте настройки в Info.plist, если у вас есть пустой массив 'Document Content Type UTIs', который необходимо правильно заполнить или удалить. Удалить пустой массив UTI типов содержимого документа из Info.plist

Ваш Info.plist должен выглядеть примерно так: Document Types Info.plist

person David Douglas    schedule 22.01.2014
comment
Обратите внимание, что это заставит ваше приложение принимать любой файл, а не только заданное расширение, потому что CFBundleTypeExtensions имеет значение *. Если вы поддерживаете только определенные расширения файлов, укажите их вместо них. В противном случае ОС предложит открыть случайные файлы с вашим приложением только для того, чтобы ваше приложение тогда не удалось. - person uliwitness; 25.05.2017

В текущих системах вы можете использовать UTI вместо четырехсимвольных типов старого стиля (например, fold выше). В редакторе типов документов Xcode создайте новый тип с помощью:

  • Имя: Папка
  • Идентификатор: public.folder

public.folder - это подтип public.directory. public.folder соответствует каталогам, которые отображаются как таковые для пользователя, то есть не пакетам, подобным .app оболочкам.

person Marc Liyanage    schedule 28.02.2013

Выберите свое приложение в целевой группе на боковой панели и воспользуйтесь функцией получения информации. Затем в новом окне выберите вкладку свойств, чтобы добавить новый тип документа. Для удобства назовите ее «Папка», а типы ОС должны быть «свернутыми»; тип и роль магазина, которые вы можете оставить как есть.

person Conor    schedule 02.05.2010

Если вы на самом деле создаете приложение на основе документов, настройка его так, чтобы указать путь, заставит вас выполнять гораздо больше работы, чем нужно. Просто используйте шаблон приложения на основе документа. Контроллер документа создаст для вас экземпляр нужного класса; вам нужно только написать этот класс.

Приложение, которое вы создаете таким образом, будет обрабатывать отбрасывание файлов (открывая их как документы) бесплатно.

person Peter Hosey    schedule 22.03.2010
comment
Это не приложение на основе документов, это программа для чтения электронной почты, и я хотел бы иметь возможность перетаскивать черновики, почтовые ящики и т. Д. На значок в доке. - person Tristan; 22.03.2010