Я создаю свой собственный подкласс NSApplication и нахожусь в блокпосте. Вот моя реализация метода run()
.NSWindow не закрывается при создании с помощью пользовательского NSApplication
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
.
Проблема заключается в том, что когда я нажимаю красную кнопку закрытия, окно не закрывается, и когда я выбираю «Выход» из меню значка док-станции, он не уходит. Почему это происходит?
EDIT: Та же проблема обсуждается в this answer.
EDIT 2: Я создал Objective-C версии этого кода, и все работает отлично. Я подозреваю, что проблема в том, что я не могу использовать NSAnyEventMask в Swift.
Проблема заключается в том, что это делает, это не делает его запустить. Я не могу явно указать 'running' без вызова' super.run() ' –
Хмм. Да, я вижу, что старый [образец кода GLUT] Apple (https://developer.apple.com/legacy/library/samplecode/glut/Listings/GLUTApplication_m.html) прибегал к прямому настройке переменной экземпляра '_running' суперкласса, которая Скорый, вероятно, не позволит. Итак, вы можете попробовать использовать KVC для этого: 'setValue (true, forKey:« running »)'. –
Я честно никогда не слышал об этом раньше, не могли бы вы поместить это в образец кода? Вставка того, что вы положили, не работает. - Никогда не помню, что я сказал, однако это syill не работает. –