这是我的appdelegate.swift。我从nsapplication实现application shouldterminate协议。我给出的答案取决于的状态。在主窗口控制器中启动。(这是来自Cocoa Programming for OS X的Speakline示例:Big Nerd Ranch Guide 5/E-I正试图将该示例再向前推进一步,以防止程序在谈话过程中被允许退出。)
我要做的是将TerminateReply.TerminateCancel更改为TerminateReply.TerminateRelater,然后在对话完成时向应用程序发送replyToApplications应终止(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)
}
}
它告诉我不能用胸部。它还告诉我,当我试着回答“是”时,我不能使用客观的C bool。我该如何告诉NSApplication现在退出是可以的?
最佳答案
我相信你应该改变
NSApplication.replyToApplicationShouldTerminate(true)
到
NSApplication.sharedApplication().replyToApplicationShouldTerminate(true)
因为
replyToApplicationShouldTerminate
是实例方法,而不是类方法。