要获得应用程序终止通知,我有类似以下内容
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 :(得分:2)
我认为你有两个应用程序,一个用于监视另一个应用程序。您的担心似乎是,在观察者完成工作之前,您不希望被监视的应用程序开始真正做任何事情。
在这种情况下,您只需要在进程之间进行通信。观看的应用程序应该等到观察者完成其工作。您可以使用锁来实现此目的,或者您可以使用NSDistributedNotification
(或其他IPC机制)将来自观察者的消息发送给观察者,以让它知道它可以继续。
我更喜欢锁定机制,因为如果观察者失败,它的行为正确。放置锁的最正确的地方是数据库,因为这是你想要保护的资源。
答案 1 :(得分:2)
我会尝试这样的事情:
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
if (isMyDatabaseClosed) {
[self closeMyDatabaseAndQuit];
return NSTerminateLater;
} else {
return NSTerminateNow;
}
}
-(void)closeMyDatabaseAndQuit
{
/* close your database, etc...*/
[NSApp replyToApplicationShouldTerminate: YES];
}
代码未经过测试,但你应该知道。