NSRunningApplication «прекращено» не наблюдается - PullRequest
13 голосов
/ 08 ноября 2010

Я создаю программу, которая запускает другую программу, а затем должна отслеживать ее и предпринимать действия, если она завершается.Когда приложение запущено, я могу получить экземпляр NSRunningApplication из NSWorkspace .

Теперь в документации говорится, что NSRunningApplication имеет свойство'прекращено', что является наблюдаемым значением ключа.Я пытался реализовать:

[browserInstance addObserver:self 
                          forKeyPath:@"terminated"
                             options:NSKeyValueObservingOptionNew
                             context:NULL];

И:

- (void)observeValueForKeyPath:(NSString *)keyPath 
                      ofObject:(id)object 
                        change:(NSDictionary *)change
                       context:(void *)context  
{  

        NSLog(@"observeValueForKeyPath");  
        if ([keyPath isEqual:@"terminated"])  
        {  
            NSLog(@"terminated");  
        }  
} 

, но я никогда не видел, чтобы метод наблюдайВалюФоркей срабатывал.Кто-нибудь знает, как сделать эту работу, если это возможно?Я не смог найти ни одного конкретного примера в Интернете.

Ответы [ 4 ]

16 голосов
/ 24 января 2011

Вы пробовали keyPath "isTermination"?

Обратите внимание, что в документации для NSRunningApplication свойство terminated указывает получатель isTerminated, а не стандартный получатель terminated. (Что имеет смысл, так как логическое свойство «есть» или «нет»)

Это говорит о том, что может быть ошибка при разборе свойства obj-c, когда имя пути получения используется для пути KVO.

4 голосов
/ 23 января 2011

В итоге я использовал:

NSNotificationCenter *center = [[NSWorkspace sharedWorkspace] notificationCenter];

    // Install the notifications.

    [center addObserver:self 
               selector:@selector(appLaunched:) 
                   name:NSWorkspaceDidLaunchApplicationNotification 
                 object:nil];
    [center addObserver:self 
               selector:@selector(appTerminated:) 
                   name:NSWorkspaceDidTerminateApplicationNotification 
                 object:nil];

И затем реализовал appLaunched и appTermination методы.

0 голосов
/ 24 января 2011

Взгляните на техническую записку Apple 2050: наблюдение времени жизни процессов без опроса .

TN2050 охватывает рекомендуемые Apple методы наблюдения за временем жизни запущенных вами процессов и процессов, запущенных другими.

0 голосов
/ 09 ноября 2010

Вопрос «подключен ли он?»: Вы убедились, что browserInstance не nil, верно?

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