【发布时间】:2016-07-07 18:00:56
【问题描述】:
我正在创建自己的 NSApplication 子类,但遇到了障碍。这是我对run() 方法的实现。
override func run() {
finishLaunching()
repeat {
let event = nextEventMatchingMask(0xfffffffffffffff, untilDate: NSDate.distantPast(), inMode: NSDefaultRunLoopMode, dequeue: true)
if event != nil { sendEvent(event!) }
updateWindows()
} while true
}
在我的main.swift 我有这个:
let myApp: MyApplication = MyApplication.sharedApplication() as! MyApplication
let window = NSWindow(contentRect: NSMakeRect(0, 0, 100, 100), styleMask: NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask , backing: .Buffered, defer: false)
window.makeKeyAndOrderFront(nil)
myApp.run()
我之所以使用0xfffffffffffffff 而不是Int(NSEventMask.AnyEventMask.rawValue) 是因为后者在从UInt64 转换为Int 时会溢出。
问题是,当我点击红色的关闭按钮时,窗口没有关闭,当我从停靠图标菜单中选择“退出”时,它没有退出。为什么会这样?
编辑:this answer.中讨论了同样的问题
编辑 2:我创建了这段代码的 Objective-c 版本,一切正常。我怀疑问题是我不能在 Swift 中使用 NSAnyEventMask。
【问题讨论】: