Ich erstelle meine eigene Unterklasse von NSApplication und stoße in einen Roadblock. Hier ist meine Implementierung der run()
Methode.NSWindow schließt nicht, wenn mit benutzerdefinierter NSApplication erstellt
override func run() {
finishLaunching()
repeat {
let event = nextEventMatchingMask(0xfffffffffffffff, untilDate: NSDate.distantPast(), inMode: NSDefaultRunLoopMode, dequeue: true)
if event != nil { sendEvent(event!) }
updateWindows()
} while true
}
In meinem main.swift
Ich habe dies:
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()
Der Grund, warum ich habe 0xfffffffffffffff
statt Int(NSEventMask.AnyEventMask.rawValue)
da dieser überläuft, wenn UInt64
-Int
umgewandelt.
Das Problem ist, wenn ich auf den roten Schließen-Button klicke, wird das Fenster nicht geschlossen, und wenn ich "Beenden" aus dem Dock-Icon-Menü wähle, wird es nicht beendet. Warum passiert das?
EDIT: Das gleiche Problem in diskutiert wird this answer.
EDIT 2: Ich habe eine Objective-c Version dieses Codes erstellt, und alles funktioniert. Ich vermute das Problem ist, dass ich NSAnyEventMask nicht in Swift verwenden kann.
Das Problem ist, dass das, was tut, ist es nicht laufen zu lassen. Ich kann 'running' nicht explizit festlegen, ohne' super.run() '' –
Hmm zu nennen. Ja, ich sehe, dass Apples alter [GLUT-Beispielcode] (https://developer.apple.com/legacy/library/samplecode/glut/Listings/GLUTApplication_m.html) darauf abzielt, die Instanzvariable '_running' der Superklasse direkt zu setzen Swift wird wahrscheinlich nicht erlauben. Also könntest du es mit KVC versuchen: 'setValue (true, forKey:" running ")'. –
Ich habe ehrlich gesagt noch nie davon gehört. Könnten Sie das in ein Codebeispiel einfügen? Das, was du eingibst, funktioniert nicht. - Vergiss, was ich gesagt habe, aber es funktioniert nicht. –