当前位置 : 主页 > 手机开发 > 其它 >

swift – 使用自定义NSApplication创建时,NSWindow不会关闭

来源:互联网 收集:自由互联 发布时间:2021-06-11
我正在创建自己的NSApplication子类,并且遇到了障碍.这是我的run()方法的实现. override func run() { finishLaunching() repeat { let event = nextEventMatchingMask(0xfffffffffffffff, untilDate: NSDate.distantPast(), inMod
我正在创建自己的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.

你应该只在自我运动时重复.这可以解释为什么您的应用程序不会退出.如果您的应用程序配置为在最后一个窗口关闭时退出,它也可以解释您的窗口未关闭的原因.无论如何,如果整个应用程序要退出,框架可能不会单独关闭窗口.
网友评论