2011-12-09 3 views
2

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

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

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




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

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

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

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

+0

Вы используете основные данные? –

+0

нет, я не использую coreData – Akbar

ответ

2

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

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

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

2

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

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

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

Код не проверял, но вы должны получить представление.

Смежные вопросы