这是我的AppDelegate.swift。我从NSApplication实现了applicationShouldTerminate协议。我给出的答案取决于is.started在mainWindowController中的状态。 (这是来自OS X的可可编程的SpeakLine示例:The Big Nerd Ranch Guide 5 / e-我试图将示例更进一步,并且在正在进行通话时不允许程序退出。)
我想要做的是将TerminateReply.TerminateCancel更改为TerminateReply.TermianteLater,然后在完成通话时向NSApplication发送replyToApplicationShouldTerminate(true)信号。现在它位于MainControllerWindow.swift类中,我有一个函数设置来处理语音合成器中的状态变化,这就是我想要调用它的地方。
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var mainWindowController: MainWindowController?
func applicationDidFinishLaunching(aNotification: NSNotification) {
let mainWindowController = MainWindowController()
mainWindowController.showWindow(self)
self.mainWindowController = mainWindowController
}
func applicationShouldTerminate(sender: NSApplication) -> NSApplicationTerminateReply {
if (mainWindowController!.isStarted) {
return NSApplicationTerminateReply.TerminateCancel
} else {
return NSApplicationTerminateReply.TerminateNow
}
}
}
问题是,当我把它放在这里时,我得到一个错误。
var isStarted: Bool = false {
didSet {
updateButtons()
NSApplication.replyToApplicationShouldTerminate(true)
}
}
它告诉我我不能使用布尔。它还告诉我,当我尝试使用YES时,我不能使用Objective C bool。我如何告诉NSApplication现在可以退出?
答案 0 :(得分:3)
我相信你应该改变
NSApplication.replyToApplicationShouldTerminate(true)
到
NSApplication.sharedApplication().replyToApplicationShouldTerminate(true)
因为replyToApplicationShouldTerminate
是实例方法而不是类方法。
答案 1 :(得分:0)
我的丝毫迅速5.x:
NSApplication.shared.reply(toApplicationShouldTerminate: true)