我希望我的应用程序在退出之前要求确认,除了,当系统在关机或重启期间终止它时(因为当OS X尝试在午夜应用安全更新时它会卡在上面) “你确定吗?”消息框。)
如何找到启动终止的内容?在[NSApp terminate:sender]
中,发件人始终为nil
。
我的第一个想法是只在“Quit”主菜单项被激活时询问,但是用户也可以从Dock菜单终止应用程序或者在按住Cmd + Tab的同时按Cmd + Q,我想要在这些情况下也要求确认。
答案 0 :(得分:2)
您可以在系统即将关闭,重新启动或用户刚刚注销时收到通知。这不是普通的通知,而是工作空间通知。
您可以注册这样的通知:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
//...more code...
self.powerOffRequestDate = [NSDate distantPast];
NSNotificationCenter *wsnCenter = [[NSWorkspace sharedWorkspace] notificationCenter];
[wsnCenter addObserver:self
selector:@selector(workspaceWillPowerOff:)
name:NSWorkspaceWillPowerOffNotification
object:nil];
}
在通知处理程序中,您应该只保存日期:
- (void)workspaceWillPowerOff:(NSNotification *)notification
{
self.powerOffRequestDate = [NSDate new];
}
添加
@property (atomic,strong,readwrite) NSDate *powerOffRequestDate;
到适当的地方。
当您的应用被要求终止时,您应该获取该日期并检查计算机是否即将关闭。
if([self.powerOffRequestDate timeIntervalSinceNow] > -60*5) {
// shutdown immediately
} else {
// ask user
}
我为以下边缘情况选择了5分钟的间隔:计算机应关机,但另一个应用取消了。您的应用仍在运行。 10分钟后,用户关闭您的应用。在这种情况下,应用应该询问用户。这有点像黑客,但它不是一个疯狂的黑客"我想......
希望这有帮助。