2011-12-09 59 views
2

獲取應用程序終止通知我有類似如下的如何讓應用程序迅速終止通知可可

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

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




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

其實我關心的是,當Firefox的應用程序退出/重新啓動,我需要更新其數據庫。當firefox手動退出時,我可以使用appTerminated作爲firefox釋放其鎖定到數據庫的幫助來更新。當它處於運行狀態時,我無法更新數據庫,因爲Firefox正在鎖定它。當Firefox重新啓動時,它是退出並重新啓動太快,以至於無法更新數據庫,因爲它處於運行狀態。我需要在重新啓動之前更新數據庫。確定firefox處於退出狀態。

所以,我需要firefox將要退出之前的通知。 是否有任何API可用或請給點意見。

在此先感謝

+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]; 
} 

的代碼沒有進行測試,但你應該拿個主意。