Как получить уведомление о прекращении приложения быстро какао - PullRequest
2 голосов
/ 09 декабря 2011

Чтобы получить уведомление о прекращении работы приложения, у меня есть что-то вроде следующего

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

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




- (void)appTerminated:(NSNotification *)note
{
    NSLog(@"+ appTerminated");
}

на самом деле меня беспокоит, когда приложение firefox закрывается / перезапускается, мне нужно обновить его базу данных. Когда firefox завершает работу вручную, я могу обновить с помощью appTermination, когда firefox освобождает свою блокировку для базы данных. Когда она работает, Я не могу обновить базу данных, так как Firefox блокирует ее. Когда Firefox перезапускается, он выходит и перезапускается слишком быстро, поэтому я не могу обновить базу данных, так как она находится в работающем состоянии. Мне нужно обновить базу данных, прежде чем она перезапустится. Firefox находится в состоянии покоя.

Итак, мне нужно уведомление как раз перед тем, как firefox собирается выйти. Есть ли какие-либо API для этого или пожалуйста, дайте несколько идей.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Я бы попробовал что-то вроде этого:

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
    if (isMyDatabaseClosed) {
         [self closeMyDatabaseAndQuit];
         return NSTerminateLater;
    } else {
         return NSTerminateNow;
    }
}

-(void)closeMyDatabaseAndQuit 
{
/* close your database, etc...*/
    [NSApp replyToApplicationShouldTerminate: YES];
}

Код не проверен, но вы должны понять.

2 голосов
/ 09 декабря 2011

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

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

Я предпочитаю механизм блокировки, так как он работает правильно, если наблюдатель выходит из строя. Самое правильное место для блокировки - это база данных, которую вы пытаетесь защитить.

...