Я работаю над служебным приложением Cocoa / Objective C ++ и хочу обработать несколько (мгновенных) открытий файлов. Для обработки части открытия файла у меня есть эта функция в моем AppDelegate.mm
файле:
- (BOOL)application:(NSApplication*)app openFile:(NSString *)filename
{
NSLog(@"Opening file %@", filename);
// more C++ code here
return YES;
}
Файлы отправляются в Quicksilver, который, я думаю, будет отправлять файлы один за другим в приложение («Открыть с помощью» Finder, я думаю, отправляет все файлы одновременно - и, возможно, использование handleOpenApplicationEvent:(NSAppleEventDescriptor *)event
может работать лучше для что) - но независимо от того, приложение получит несколько файлов один за другим - почти мгновенно - но не совсем вместе. Вот что показывает Console.app:
console-screenshot.png http://img109.imageshack.us/img109/1205/consolescreenshot.png
Поскольку файлы отправляются отдельно, но один за другим, у меня вопрос: как мне собрать все отправленные файлы и сделать с ними одну вещь? Например, я хотел бы собрать все отправленные пути к файлам и затем отобразить их вместе в диалоговом окне.
Я могу придумать одну концепцию, которая может сработать: сохранять каждый путь к файлу в массиве по мере его поступления. В то же время, когда первый получен, установите задержку в 1-2 секунды в фоновом режиме, а затем в диалоговом окне отобразите все, что является определенной переменной. Правильно ли это понятие или есть лучший способ сделать это? Я новичок в Cocoa / Objective C ++ - из таких языков, как PHP / Perl, bash и т. Д.
Я также хотел бы, чтобы это вспомогательное приложение завершалось, когда оно было завершено, но если я жду файлы, как я могу завершить приложение, когда последний из файлов получен?
Если я добавлю [NSApp terminate:nil];
к функции applicationDidFinishLaunching
, приложение фактически завершит работу после получения только первого файла.
Обновление - больше заметок
Это консоль после использования функции openFiles
(множественное число):
Изображение 7.png http://img24.imageshack.us/img24/5715/picture7zc.png
И с помощью Quicksilver я беру некоторые файлы, например файлы из временного каталога, и выбираю «Открыть с помощью», а затем создаваемое приложение (с именем darn.app)
Снимок экрана 2012-01-18 в 7.02.45 PM.png http://img9.imageshack.us/img9/4171/screenshot20120118at702.png
Но с Finder все работает нормально:
Снимок экрана 2012-01-18 в 7.09.08 PM.png http://img832.imageshack.us/img832/8858/screenshot20120118at709.png
... приводит к consolea.app:
Изображение 8.png http://img24.imageshack.us/img24/2812/picture8fe.png
Я спрашивал разработчиков Quicksilver, и они подтвердили, что QS открывает файлы по одному с действием Open With, и они признают, что это отличается от того, как это делает Finder, но они видят это как задуманное. Так что, возможно, Даррен прав - лучше всего выбрать таймер ...