Сравнение различных методов запуска приложения Cocoa с параметрами - PullRequest
4 голосов
/ 26 июля 2010

Я обнаружил, что существует как минимум три способа запуска приложения с Mac OS X из приложения.

  1. NSTask .Я могу дать параметры, но кажется, что это не для приложения Какао, а двоичного файла в стиле UNIX.
  2. системная функция (system ()) точно так же, как и Си.Я не знаю причину, почему, но кажется, что никто не рекомендует этот метод.
  3. NSWorkspace , но я не могу найти способ передать параметры этой функции.

Вопросы

  • В1: Есть ли другой способ запуска приложения (из приложения), кроме трех методов?
  • В2: Что такоеплюсы и минусы для каждого метода?
  • Q3: Какой способ запуска приложения (из приложения) является предпочтительным?
  • Q4: Какой способ запуска приложения с параметрами (из приложения) является предпочтительным?
  • Q5: Какой предпочтительный способ открыть документ (из приложения)?

ДОБАВЛЕНО

  • NSWorkspace openFile:withApplication:: Для запуска "TextMate README".txt ", основываясь на ответе Roadmaster и этого кода , я мог бы сделать это следующим образом.Но Я не могу передать параметры приложению.
    NSString * path = @"/Users/smcho/Desktop/README.txt";
    NSURL * fileURL = [NSURL fileURLWithPath: path];
    NSWorkspace * ws = [NSWorkspace sharedWorkspace];
    [ws openFile:[fileURL path] withApplication:@"TextMate"];
  • NSWorkspace launchApplicationAtURL:options:: Работает с 10.6 или более поздней Вы можете получить пример из этого вопроса .
    NSURL * bURL = [[NSWorkspace sharedWorkspace] URLForApplicationWithBundleIdentifier:@"com.macromates.textmate"];
    NSWorkspace * ws = [NSWorkspace sharedWorkspace];
    [ws launchApplicationAtURL:bURL options:NSWorkspaceLaunchDefault configuration:nil error:nil];
  • NSTask: это рабочий код.Мне нужно указать правильный двоичный путь, и он не похож на способ Какао, так как он предназначен для запуска двоичного файла, а не связки. Хотя можно задать больше параметров, чем просто имя файла.
    [NSTask launchedTaskWithLaunchPath:@"/Applications/TextMate.app/Contents/MacOS/TextMate"     arguments:[NSArray arrayWithObjects:@"hello.txt", nil]];
  • system(): С помощью оболочки я мог запустить «system (open -a ABC --args hello.txt)», как и в командной строке, Кажется, что это самый простой путь.

Ответы [ 2 ]

3 голосов
/ 26 июля 2010

В 10.6 и более поздних версиях NSWorkspace имеет метод launchApplicationAtURL:options:configuration:error:, который можно использовать для передачи аргументов приложению.

Существуют также функции служб запуска, такие как LSOpenItemsWithRole.

Вы также можете отправить AppleEvent в Finder с просьбой открыть что-нибудь.

РЕДАКТИРОВАТЬ ДОБАВИТЬ: «лучший» субъективен, но я бы сказал, если вы можете использовать NSWorkspace, используйте его. Если вы не можете, например, вам нужно передать параметры командной строки и вам нужна поддержка Leopard, тогда используйте Launch Services.

0 голосов
/ 13 декабря 2013

Используя Scripting Bridge, вы можете использовать метод activate для запуска приложения с какао. См .: Мост сценариев .

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