这是我的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是实例方法,而不是类方法。

07-24 09:30