Как вы ждете закрытия приложения в OS X? - PullRequest
2 голосов
/ 01 апреля 2012

Я использую приведенный ниже код, чтобы проверить, запущено ли приложение, и закройте его.Может кто-нибудь привести пример того, как запросить приложение calose и дождаться его закрытия, прежде чем продолжить?

+ (BOOL)isApplicationRunningWithName:(NSString *)applicationName {
    BOOL isAppActive = NO;
    NSDictionary *aDictionary;
    NSArray *selectedApps = [[NSWorkspace sharedWorkspace] runningApplications];

    for (aDictionary in selectedApps) {
        if ([[aDictionary valueForKey:@"NSApplicationName"] isEqualToString: applicationName]) {
            isAppActive = YES;
            break;
        }
    }
    return isAppActive;
}

+ (void)stopApplication:(NSString *)pathToApplication {
    NSString *appPath = [[NSWorkspace sharedWorkspace] fullPathForApplication:pathToApplication];
    NSString *identifier = [[NSBundle bundleWithPath:appPath] bundleIdentifier];
    NSArray *selectedApps = [NSRunningApplication runningApplicationsWithBundleIdentifier:identifier];
    // quit all
    [selectedApps makeObjectsPerformSelector:@selector(terminate)];
}

Ответы [ 3 ]

3 голосов
/ 02 апреля 2012

Вы можете использовать Наблюдение значения ключа для наблюдения свойства terminated каждого работающего приложения.Таким образом, вы получите уведомление о завершении работы каждого приложения без необходимости опроса.

1 голос
/ 01 апреля 2012

Один из способов - периодически вызывать isApplicationRunningWithName по таймеру и ждать, пока эта функция вернет NO.

0 голосов
/ 02 апреля 2012

Командная строка timelimit позволит вам отправить сигнал закрытия в приложение, подождать х секунд, затем убить его (или отправить любой другой сигнал, который вам нравится, убить -9), если не имеет подчинился «предупреждающему» сигналу.

(Примечание: я не пробовал компилировать его на Mac, но я считаю, что это довольно POSIX-совместимый код, а не специфичный для Linux, так как он работает на BSD и других.)

...