我希望有一个状态栏应用程序,它会在系统关闭/重启之前显示NSAlert
。 (只是一个NSStatusItem
,没有窗口。)
它检测到关机并显示警报,但在用户与警报交互之前,应用程序已终止,系统将关闭。
有没有办法强制系统在系统关闭之前等待警报完成?
编辑:如果应用程序显示在Dock中,则代码确实有效,但如果它是NSApplicationActivationPolicy.Accessory
或UI Element
则无效。我试图在它退出之前将它恢复到Dock,但在它再次弹出之前它已被终止。
以下是代码示例:
func receivedPowerOffNotification(notification: NSNotification) {
let myAlert: NSAlert = NSAlert()
myAlert.alertStyle = NSAlertStyle.CriticalAlertStyle
myAlert.messageText = "Title"
myAlert.informativeText = "Please wait for this alert"
myAlert.addButtonWithTitle("OK")
myAlert.addButtonWithTitle("Not OK")
let response = myAlert.runModal()
if response != NSModalResponseOK {
// Do something here before shutdown the system.
}
}
NSApplication.sharedApplication().replyToApplicationShouldTerminate(true)
}
func applicationShouldTerminate(sender: NSApplication) -> NSApplicationTerminateReply {
// userQuit = if the termination was caused by the Quit menu.
return userQuit ? NSApplicationTerminateReply.TerminateNow : NSApplicationTerminateReply.TerminateLater
}
答案 0 :(得分:1)
好的,在使用Apple的开发者技术支持( DTS )来回发送电子邮件后,简短回答是不可能的(对于< strong> LSUIElement / 代理以捕获关闭/重新启动进程):
来自Apple员工的引用:
AppKit中的规则更改为基于用户代理的应用程序。他们 旨在不与用户交互,即使通过我们的 文档说明您可以添加窗口。由于你的应用程序有一个 NSStatusItem,它构成一个UI,它不应该是用户代理 根据。在这种情况下,您正在与用户进行交互。
我确实问过是否有“内部”方式。答案仍然没有。