NSApplicationの独自のサブクラスを作成していて、ロードブロッキングを実行中です。ここにrun()
メソッドの実装があります。私main.swift
でカスタムNSApplicationで作成したNSWindowが閉じない
override func run() {
finishLaunching()
repeat {
let event = nextEventMatchingMask(0xfffffffffffffff, untilDate: NSDate.distantPast(), inMode: NSDefaultRunLoopMode, dequeue: true)
if event != nil { sendEvent(event!) }
updateWindows()
} while true
}
私はこれを持っている:私はInt
にUInt64
から変換されたときの代わりInt(NSEventMask.AnyEventMask.rawValue)
の0xfffffffffffffff
は後者のオーバーフローためである持っている理由
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()
理由。
問題は、赤い閉じるボタンをクリックするとウィンドウが閉じず、ドックアイコンメニューから「終了」を選択すると終了しないという問題です。なぜこれが起こるのですか?
EDIT:同じ問題がthis answer.
EDIT 2で説明されています。私は、このコードのObjective-Cのバージョンを作成しましたし、すべてが正常に動作します。問題は、SwiftでNSAnyEventMaskを使用できないということです。
問題があり、どのようなことはありませんが、それは実行しませんさ。 'super.run()'を呼び出さずに 'running'を明示的に設定することはできません –
Hmm。 Appleの古い[GLUTサンプルコード](https://developer.apple.com/legacy/library/samplecode/glut/Listings/GLUTApplication_m.html)は、スーパークラスの '_running'インスタンス変数を直接設定していることがわかりました。スウィフトはおそらく許されません。ですから、あなたはKVCを使って 'setValue(true、forKey:" running ")'しようとすることができます。 –
これまで私は正直言って聞いたことがありませんが、あなたはそれをコードサンプルに入れることができますか?あなたが置いたものを貼り付けることはできません。 - 私が言ったことを気にしないでください。しかし、それはsyillが効きません。 –