将replyToApplicationShouldTerminate发送到Swift中的NSApplication

时间:2015-06-04 23:33:46

标签: swift cocoa nsapplication

这是我的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现在可以退出?

2 个答案:

答案 0 :(得分:3)

我相信你应该改变

NSApplication.replyToApplicationShouldTerminate(true)

NSApplication.sharedApplication().replyToApplicationShouldTerminate(true)

因为replyToApplicationShouldTerminate是实例方法而不是类方法。

答案 1 :(得分:0)

我的丝毫迅速5.x:

        NSApplication.shared.reply(toApplicationShouldTerminate: true)