2015-06-04 3 views
1

Вот мой AppDelegate.swift. Я реализую протокол applicationShouldTerminate из NSApplication. Какой ответ я даю, зависит от статуса is.Started в mainWindowController. (Это пример SpeakLine из Cocoa Programming для OS X: Руководство Big Nerd Ranch 5/e-я пытаюсь сделать пример еще на один шаг и не дать программе выйти из игры во время разговора).Отправка ответаToApplicationShouldTerminate в NSApplication в Swift

Что я хочу сделать, это изменить TerminateReply.TerminateCancel на TerminateReply.TermianteLater, а затем отправить NSApplication ответToApplicationShouldTerminate (true), когда разговор будет выполнен. Поскольку он стоит сейчас в классе MainControllerWindow.swift, у меня есть функция, настроенная для обработки изменений состояния в Speech Synthesizer, и именно там я хочу ее назвать.

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) 
     } 
    } 

Это говорит мне, что я не могу использовать bool. Это также говорит мне, что я не могу использовать Objective C bool, когда пытаюсь поставить YES. Как сообщить NSApplication, что сейчас нормально уходить?

ответ

3

Я считаю, что вы должны изменить

NSApplication.replyToApplicationShouldTerminate(true) 

в

NSApplication.sharedApplication().replyToApplicationShouldTerminate(true) 

так replyToApplicationShouldTerminate это метод экземпляра, а затем метод класса.

+0

Это работает отлично, спасибо !!! – stormj

+0

Я принял его, но у меня недостаточно очков для повышения. – stormj

Смежные вопросы